猿问

简单的C扫描不工作?

简单的C扫描不工作?

如果我尝试这样的东西:

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(首先,它工作得很好。到底是怎么回事?


繁星coding
浏览 358回答 3
3回答

翻过高山走不出你

读取输入时使用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将从缓冲区读取换行符并丢弃它。您可能需要阅读以下内容:常见问题:为什么每个人都说不使用scanf?

人到中年有点甜

其他答案是正确的-%c不跳过空格。最简单的方法是将空格放在%c:scanf(" %c", &achar);(格式字符串中的任何空格都会使scanf使用所有连续空格)。

叮当猫咪

呼叫getchar()以前scanf也将清除存储的行中断。更轻巧,但更符合实际情况char input_1;char input_2;getchar();scanf("%c", &input_1);getchar();scanf("%c", &input_2);将刷新换行符,在连续的代码行中更有用,在这些代码中,您知道它只是一个排队的值,而不是一个字符串。
随时随地看视频慕课网APP
我要回答