在fgets之前清理输入缓冲区

时间:2014-01-08 18:17:51

标签: c++ string input buffer fgets

今天我发现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,则它们会进入下一个字符串,因此可能有一个清理缓冲区的解决方案。 谢谢

0 个答案:

没有答案