1

我犯了使用 fflush(stdin) 像这样刷新标准输入流的剩余部分的错误:

printf("Gimme number");
scanf("%d",&number);
fflush(stdin);
printf("Gimme string");
gets(string);

当然,我已经包含了头文件和其他文件。我知道 fflush 是用于标准输出而不是标准输入,但我非常需要一个替代方案才能在 scanf 之后使用 get。我在这里搜索旧帖子,但只看到有关 scanf("%c\n",c); 的建议 . 当我执行 scanf("%d\n",x); 时,这会使程序崩溃。请问有什么想法吗?

4

2 回答 2

3

scanf一种可能性是使用类似的东西来消耗 via 留下的换行符getchar()

printf("Gimme number");
scanf("%d",&number);
getchar();
printf("Gimme string");
gets(string);

另一种可能性是只使用scanf:

printf("Gimme number");
scanf("%d",&number);
printf("Gimme string");
scanf(" %99s", string);

99在用字符串缓冲区的长度替换 的地方,请注意 . 之前的空格%以确保它忽略 . 上留下的空格(或制表符或换行符)stdin

于 2013-01-08T21:26:37.773 回答
0

从输入中读取整行(包含 ENTER 的行)。解析行(可能使用strtol()srttod()sscanf())。

char buffer[1000];
int number;
printf("Gimme number: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
number = strtol(buffer, &err, 10); // needs error checking
printf("Gimme string: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
strcpy(string, buffer);
string[strlen(string) - 1] = 0; // remove ENTER
于 2013-01-08T21:42:49.940 回答