繁体   English   中英

编译器不会在scanf()上停止输入

[英]Compiler doesn't stop on scanf() for input

这是一个小的C代码

  #include<stdio.h>
  int main()
  {
    char ch='Y';
    while(ch=='Y')
    {
      printf("\nEnter new value for Y ");
      scanf("%c",&ch);
      if(ch=='Y' || ch=='y')
        // do some work 
        printf("Y was selected\n");
    }
    printf("exiting main");
    return 0;
  }

我第一次输入'Y'作为输入(没有qoutes),循环返回true并第二次进入循环,但这一次它没有在scanf()上停止供用户输入。(请使用为清楚起见,“ Y”)。 输出如下所示:

在此处输入图片说明

如此处所示,编译器没有第二次停止输入。 这背后的原因是什么? 提前致谢 !

像这样在scanf中放置一个空格:

scanf(" %c",&ch);

原因是您输入: Y\\n (使用回车键)
scanf仅读取Y 因此,在下一个scanf \\n仍在缓冲区中并读入!

因此,如果您在阅读新内容之前有一个空格,它会被切掉(看起来像这样:'\\ n')!

'\\n'自动成为下一次迭代的输入。

为了避免这种情况,请使用getchar() 它将处理不需要的'\\n'

#include<stdio.h>
  int main()
  {
    char ch='Y';
    while(ch=='Y')
    {
      printf("\nEnter new value for Y ");
      scanf("%c",&ch);

      getchar();  //takes care of '\n'

      if(ch=='Y' || ch=='y')
        // do some work 
        printf("Y was selected\n");
    }
    printf("exiting main");
    return 0;
  }

该代码现在可以正常工作。 以下是命令窗口中的代码段。

Enter new value for Y Y
Y was selected

Enter new value for Y Y
Y was selected

Enter new value for Y _

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM