C、刷新stdin

Dog*_*Doo 4 c stdin

我在使用 fgets 时遇到问题。循环应该读取一行最大值。19 个字符,分析这个字符数组,然后等待下一个输入。问题是,如果输入的行超过 19 个字符,fgets 将用剩余的字符填充 str,直到输入 Ctrl-D 或换行符,从而在没有新输入的情况下启动新循环。输入 (stdin) 应该在读取 19 个字符后以某种方式刷新,因此循环可以从干净的石板开始。任何人都有解决方案?

 char str[20];
 while((fgets(str, 20, stdin) != NULL)) {
  puts(str);        //monitoring str

  if(str[0] == 'q') break;
 }
Run Code Online (Sandbox Code Playgroud)

使用示例:

hola hola                        //user inputs 9 chars + newline
hola hola                        //puts writes

hoo hoo hoo hoo hooh             //user inputs 20 chars + newline
hoo hoo hoo hoo hoo              //puts writes
h                                //
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 6

scanf("%*[^\n]\n"); 可能是最简单的可能性之一。

  • 你可能想使用 `"%*[^\n]%*c"` 而不是 `"%*[^\n]\n"`。`\n` 不匹配文字换行符,而是丢弃任何数量的空格,直到下一个非空格字符。 (5认同)