scanf()函数不使用';不行?
这可能是一个简单的问题,但我搜索了很多,仍然没有找到答案。 我用gcc编译下面的snip代码,并从终端运行程序。在正确的情况下,它允许输入int和char,但不允许。它不等待输入字符 这里任何能帮助我的人都会很好的。提前谢谢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
#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:用原因更新我的答案。希望能说清楚!!!这正是我所做的:输入一个数字,然后是一个新行。现在可以了!非常感谢!