今天我发现gets(char*)
已弃用,scanf("%s")
,因为它们会插入所有字符,并且可以从字符串内存空间中删除。我们应该使用fgets(char*, sizeof char*, stdin)
而不是它们,但是在此函数之前清除输入缓冲区时遇到问题。使用scanf
并使用此功能:
void clean_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
但如果我将它与fgets
一起使用,它会在继续执行程序之前等待Enter按。我意识到这是因为fgets
将\n
字符放在字符串中(这个函数的另一个令人不舒服的东西:/),但所以我不知道如何在不等待Enter压力的情况下清理缓冲区。如果用户插入的字符多于sizeof *str
,则它们会进入下一个字符串,因此可能有一个清理缓冲区的解决方案。
谢谢