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

时间:2011-10-01 08:27:34

标签: c string

仍然处于学习模式,可能以下问题真是愚蠢但我不知道为什么会发生这种情况..

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

感谢。

3 个答案:

答案 0 :(得分:3)

尝试删除fflush(stdin); 并在scanf(" %c",&inp);

中的%c之前添加一个空格

答案 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仅为输出流定义。