如果按下回车键,scanf()
此后将停止接收输入。我尝试了很多方法:将数据更改为字符串并将其与null进行比较,与ASCII进行比较。但是,当用户按下回车键时,我无法阻止scanf
终止。
答案 0 :(得分:4)
fgets
阅读一行文字。 fgets
能够无误地读取该行,请使用sscanf
从该行读取数字。 sscanf
成功,请使用该号码。否则,请转到错误处理代码。char line[LINE_SIZE];
if ( fgets(line, LINE_SIZE, stdin) != NULL )
{
int number;
if ( sscanf(line, "%d", &number) == 1 )
{
// Use the number
}
else
{
// Deal with error
}
}
答案 1 :(得分:2)
我认为您并不完全了解scanf
的工作原理。
如果您要求scanf
读取整数(使用%d
),则将读取整数。只要没有理由停止等待整数,它就不会停止 - 为什么会这样。您可能错过的部分是 sscanf忽略&#39;空格&#39; - 所有 RET , TAB , SPACE < / kbd>等被忽略,所有不会在屏幕上产生可见输出的内容。
这意味着如果你点击 RET , TAB , SPACE ,它们将被忽略和{{ 1}} 仍然等待你的整数。
如果你使用另一个键,就像任何一个字符一样,很明显这不是一个整数,它将停止读取并返回程序(状态为0 =成功分配为零)。
答案 2 :(得分:0)
有很多方法可以解决这个问题。
见,例如:
#include<stdio.h>
int main(void){
char enterCheck;
int check;
do{
printf("Hit Enter:> ");
if((scanf("%c",&enterCheck)) == 1){
if (enterCheck == 10){
printf("You pressed ENTER\n");
}else{
printf("You didn't press ENTER\n\n");
while((check = getchar()) != 0 && check != '\n');
}
}else{
printf("There was an Error!\n");
}
}while(enterCheck != 10);
return 0;
}
输出:
michi@michi-laptop ~ $ ./program
Hit Enter:> dsadas
You didn't press ENTER
Hit Enter:> 12
You didn't press ENTER
Hit Enter:>
You pressed ENTER
如您所见,程序要求输入ENTER键。如果你没有击中它,它会再次询问。
现在仔细看看,思考并尝试更改此程序以执行您需要的操作。想一想当你需要检查用户是否按Enter键时你会怎么做。