scanf()函数不使用';不行?

scanf()函数不使用';不行?,c,C,这可能是一个简单的问题,但我搜索了很多,仍然没有找到答案。 我用gcc编译下面的snip代码,并从终端运行程序。在正确的情况下,它允许输入int和char,但不允许。它不等待输入字符 这里任何能帮助我的人都会很好的。提前谢谢 #include <stdio.h> int main() { char c; int i; // a printf("i: "); fflush(stdin); scanf("%d", &i); // b print

这可能是一个简单的问题,但我搜索了很多,仍然没有找到答案。 我用gcc编译下面的snip代码,并从终端运行程序。在正确的情况下,它允许输入int和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;
#包括
int main()
{
字符c;
int i;
//a
printf(“i:”);
fflush(stdin);scanf(“%d”、&i);
//b
printf(“c:”);
fflush(stdin);scanf(“%c”、&c);
返回0;

}

您可以使用
getchar()
实现您想要的功能

或者使用以下命令使用额外的换行符:-

 scanf(" %c", &c);
  ^^^   <------------Note the space
scanf(“%c”和&c);

^^^
%d
将读取连续数字,直到遇到非数字<代码>%c
读取一个字符。可能发生的情况是,你给它一个数字(几个数字),然后是一个新行<代码>%c然后读入该新行。您可能打算使用
fflush(stdin)
放弃尚未读取但不幸的是

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

scanf(" %c", &c);
注意开头的空格。这意味着丢弃所有空白。

而不是
fflush(stdin);scanf(“%c”、&c)

1.使用带有额外空间的scanf

scanf(" %c",&c); 

2.使用getchar()两次,第一次读取“\n”,它是在给出整数输入后输入的,第二次调用要求您作为
c:

getchar();
c=getchar();

将对您有所帮助。

首先,
scanf
在按照指示使用时起作用。我认为下面的代码符合您的要求。刷新标准输出,以便提示用户输入整数或字符。使用%1s允许空白,如\n

int main()
{

  char c[2];
  int i;

  printf("i: ");
  fflush(stdout);
  scanf("%d", &i);

  printf("c: ");
  fflush(stdout);
  scanf("%1s", &c);

  printf("\ni = %d, c = %c", i, c[0]);

  return 0;

}
这段代码是在Eclipse/Microsoft C编译器上测试/运行的。

不保证fflush()能做任何事情,而gcc/g++不能。无论如何,Linux上没有

我以为我发明了下面的方法来冲洗一行的其余部分…直到我在ISO C规范中看到它作为一个例子(90或99…忘记了哪个,但它已经存在很长时间了…我敢打赌这里的大多数读者以前都见过它。)

scanf(“%*[^\n]%c”);/放弃所有直到下一个换行符的内容*/

你可以把它放在你自己的“刷新”功能中,以保存到处都是的打字或粘贴

您仍然应该按照建议在scanf中放置空格(“%c”、&c)


这将耐心等待非空白字符,以防前导空格或回车键被双击。

fflush(stdin)
会给您未定义的行为,不要这样做。您是否给了它回车键以及输入?输入流上没有定义fflush。糟糕的是,一些C语言书实际上鼓励了它。它给了我们什么?代码段以scanf()结尾,因此没有对变量
c
执行任何操作。实际上,
i
也是如此。注意,如果输入是终端,scanf()解析很大程度上取决于终端的
stty
设置带有
c=getchar()为我显示了相同的行为。我知道,但我想知道它在这种情况下如何不起作用。此外,当我更改顺序//a和//b时,它就会工作。下一次扫描字符时,只读取/使用换行符,因此从不等待用户input@dangnam2910:用原因更新我的答案。希望能说清楚!!!这正是我所做的:输入一个数字,然后是一个新行。现在可以了!非常感谢!