如果我尝试以下操作:
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);
它允许输入一个整数,然后跳过第二个 scanf
完全地,这真的很奇怪,因为当我交换两者时(首先是char
scanf),它工作正常。到底出了什么问题?
最佳答案
使用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;
使用换行符的另一种方法是 scanf("%c%*c",&anint);
。 %*c
将从缓冲区中读取换行符并丢弃它。
您可能想阅读以下内容:
关于c - 简单的C scanf 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570999/