scanf()函数不起作用?

dan*_*910 3 c

这可能是一个简单的问题,但我搜索了很多,仍然没有想出来.我用gcc编译下面的剪辑代码并从终端运行程序.在正确的情况下,它允许输入int和char,但它不允许.它不等待进入char?

这里的任何人都可以帮助我.提前致谢!

#include <stdio.h>

int main()
{

  char c;
  int i;

  // a
  printf("i: ");
  fflush(stdin); scanf("%d", &i);

  // b
  printf("c: ");
  fflush(stdin); scanf("%c", &c);

  return 0;
Run Code Online (Sandbox Code Playgroud)

}

ick*_*fay 6

%d将读取连续数字,直到遇到非数字.%c读一个字符.可能发生的事情是你给它一个数字(几位数)后跟一个新行.%c然后读入新行.您可能打算fflush(stdin);放弃任何尚未阅读的内容,但不幸的是,这是未定义的行为.

解决方案是在读取字符之前丢弃所有空格:

scanf(" %c", &c);
Run Code Online (Sandbox Code Playgroud)

注意开始时的空间.这意味着丢弃所有空格.


Rah*_*thi 2

您可以使用getchar()来实现您想要的。

或使用以下方法消耗额外的换行符:-

 scanf(" %c", &c);
  ^^^   <------------Note the space
Run Code Online (Sandbox Code Playgroud)

原因:- 您的下一个用于读取字符的 scanf 只是读取/使用换行符,因此从不等待用户输入