c - 冲洗替代品

标签 c string generics

我错误地使用 fflush(stdin) 来刷新 stdin 流的剩余部分:

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

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

最佳答案

一种可能性是使用 scanf 留下的换行符,方法是使用类似 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 上。

关于c - 冲洗替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224295/

相关文章:

c - Regula-Falsi 算法?

c++ - 用 C/C++ 编译一个 DLL,然后从另一个程序调用它

c++ - 如何在 C++ 中将整个文件读入 std::string?

string - Bash:如何评估这个字符串?

Java 反射 : Get concrete type of implemented generic interface

c - 链接错误 - 使用 nm 修复

c - 为什么 C 中没有内置的 swap 函数,而 Assembly 中有 xchg?

regex - 使用 grep (Bash) 找到匹配项后打印上一次出现的正则表达式

在 eclipse 中编译的 java 泛型而不是从命令行编译的

java通用通配符 "?"