【发布时间】:2015-09-16 12:41:56
【问题描述】:
这是我下面的代码。它的作用不是问题。问题是,一旦它运行,我输入我的输入,如果它太小,它会在第二行再次要求输入,这似乎不会影响我的程序流程。如果我填充了缓冲区(我假设缓冲区是 100 或更多),则不会要求我再次提示。
#include <stdio.h>
#include <string.h>
int main()
{
int ch;
char x[3];
char *word, string1[100];
x[0]='y';
while(x[0]=='y'||x[0]=='Y')
{
fgets(string1, 100, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
printf("The string is: %s", string1);
word = strtok(string1, " ");
while(word != NULL)
{
printf("%s\n", word);
word = strtok(NULL, " ");
}
printf("Run Again?(y/n):");
fgets(x, 2, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
}
return 0;
}
编辑: 我已经换了,
fgets(string1, 100, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
与,
fgets(string1, 100, stdin);
if (string1[98] != '\n' && string1[99] == '\0')
{
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
}
【问题讨论】:
-
@JohnnyMopp
fflush(stdin);是 UB。 -
我想的也差不多。有什么建议吗?
标签: c input buffer stdin fgets