如果我首先读取字符串值然后读取int值,它就有效。
我尝试使用函数gets
而不是scanf
,因为gets
允许我在同一行中读取多个单词。
我也尝试使用fgets
,但它遇到了同样的问题。
我正在使用cygwin 32位编译器版本2.874。我使用的是codeblocks ide 13.12。
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
char s[10];
printf("Value int:\n");
scanf("%d",&i);
printf("%d\n",i);
printf("Value string:");
fflush(stdin);
gets(s);
printf("%s\n",s);
getchar();
return 0;
}
答案 0 :(得分:2)
调用scanf
后,输入缓冲区中会留下换行符。因此,当您致电gets
时,只需提取换行符即可。
根据C标准,调用fflush(stdin)
是未定义的行为,尽管MSVC支持它作为扩展。您应该使用getchar
从缓冲区中读取换行符。
答案 1 :(得分:0)
当您输入整数时,第二个输入将采用新行,请使用scanf
尝试:
scanf(" %s", s); // here the space will emit the previous newline or space
或者更好地使用fgets
,这会将输入限制为缓冲区的大小:
fgets(s, sizeof s, stdin);
另外,不要使用gets
,它很危险并且会受到缓冲区溢出的影响。并且不要在fflush
上调用stdin
,stdin
是输入流,刷新它是未定义的行为。