如果我尝试以下内容:
int anint;
char achar;
printf("\nEnter any integer:");
scanf("%d", &anint);
printf("\nEnter any character:");
scanf("%c", &achar);
printf("\nHello\n");
printf("\nThe integer entered is %d\n", anint);
printf("\nThe char entered is %c\n", achar);
Run Code Online (Sandbox Code Playgroud)
它允许输入一个整数,然后scanf
完全跳过第二个,这真的很奇怪,因为当我交换两个(char
scanf优先)时,它工作正常.究竟是什么错了?
cod*_*ict 27
当使用读取输入时scanf
,在按下返回键后读取输入,但返回键生成的换行不被消耗scanf
,这意味着下次char
从标准输入读取时,将准备好读取新行.
要避免的一种方法是使用fgets
将输入作为字符串读取,然后使用以下内容提取您想要的内容sscanf
:
char line[MAX];
printf("\nEnter any integer:");
if( fgets(line,MAX,stdin) && sscanf(line,"%d", &anint)!=1 )
anint=0;
printf("\nEnter any character:");
if( fgets(line,MAX,stdin) && sscanf(line,"%c", &achar)!=1 )
achar=0;
Run Code Online (Sandbox Code Playgroud)
另一种消费换行的方法是scanf("%c%*c",&anint);
.该%*c
会从缓冲器读取换行符并将其丢弃.
你可能想读这个:
caf*_*caf 16
其他答案是正确的 - %c
不跳过空格.最简单的方法是在以下位置之前放置空格%c
:
scanf(" %c", &achar);
Run Code Online (Sandbox Code Playgroud)
(格式字符串中的任何空格都将scanf
消耗所有连续的空格).
归档时间: |
|
查看次数: |
40967 次 |
最近记录: |