注意c中字符串的奇怪行为

仍然处于学习模式,可能是下面的问题是一个非常愚蠢,但我不知道为什么会发生..

#include 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数组的大小,编译器将自动在字符串的末尾添加空字符并继续进行。 我错过了什么或者我的代码中有错误。 请建议。

谢谢。

在第二个scanf中的%c之前放一个空格,如下所示:

scanf(" %c",&inp)

正如其他人所说, fflush仅针对输出流定义。

尝试删除fflush(stdin); 并在scanf(" %c",&inp); %c之前放置一个空格scanf(" %c",&inp);

首先fflush(stdin)是错误的 。 很多人推荐它,但它很简单明了。

该问题是由scanf在输入缓冲区中留下\n引起的,因为“%s”不读取空格字符。 当达到scanf("%c"..)时,立即“满意”并用\n填充inp并将其称为一天。

问题很常见,请参阅以下C常见问题解答:

  • Scanf交错
  • Scanf问题

一个(可能是危险的)解决方案是丢弃\n输入:

 while((c = getchar()) != '\n' && c != EOF) ; 

另一个解决方案可能是使用fgets并解析它,或者可能使用getc一次读取一个字符,或者可能调整第二个scamf以丢弃空白字符。