仍然处于学习模式,可能以下问题真是愚蠢但我不知道为什么会发生这种情况..
#include<stdio.h>
int main()
{
/* code to accept string and then a character from stdin */
char str[20], inp;
/*take string from stdin */
printf("string:\n");
scanf("%s",str);
fflush(stdin);
/*input a character */
printf("char:\n");
scanf("%c",&inp);/* code does not reach this point and exits */
}
如评论中所述,输入字符串后,例如。 'strng'代码只是在打印char后退出:但它不会等我输入字符。根据我的理解,我已经给出了足够大的数组大小来存储字符串,如果输入的字符串小于str数组的大小,编译器将自动在字符串的末尾添加空字符并继续进行。我错过了什么或者我的代码中有错误。请建议。
感谢。
答案 0 :(得分:3)
尝试删除fflush(stdin);
并在scanf(" %c",&inp);
答案 1 :(得分:2)
首先 fflush(stdin)
is wrong 。很多人推荐它,但它很简单明了。
问题是由scanf
在输入缓冲区中留下\n
引起的,因为“%s”不会读取空格字符。达到scanf("%c"..)
后,会立即“满意”并使用inp
填充\n
并将其称为一天。
问题很常见,请参阅以下C常见问题解答:
一个(可能是危险的)解决方案是丢弃\n
输入:
while((c = getchar()) != '\n' && c != EOF)
;
另一个解决方案可能是使用fgets
并解析它,或者可能一次用getc
读取一个字符,或者调整第二个scamf以丢弃空白字符。
答案 2 :(得分:1)
在第二个scanf中的%c
之前加一个空格,如下所示:
scanf(" %c",&inp)
正如其他人所说fflush
仅为输出流定义。