我有同样的问题,比如
Why do i have to press ctrl+d several times for scanf to see it?
我想退出循环,当我输入数字0或ctrl + D.它只有在重复击中组合时才有效,在我提到的主题中,有解释原因,但我不知道如何解决我的问题代码,所以我决定问一下
这是我的代码的一部分
do{
scanf("%f", &coin);
payment=payment+coin;
if ((coin !=0) && (coin !=100) && (coin !=50) && (coin !=20) && (coin !=10) && (coin !=5) && (coin !=2) && (coin !=1) && (coin !=0.5) && (coin*100 !=20) && (coin*100 !=10) && (coin*100 !=5) && (coin*100 !=2) && (coin*100 !=1)){
if (coin>=1){
rest=coin;
while(rest>=1)
rest--;
if (rest!=0)
printf("%.2f is invalid!\n", coin);
else
printf("%.0f is invalid!\n", coin);
}
else
printf("%.2f is invalid!\n", coin);
return(EXIT_FAILURE);
}
}while (coin != 0 && (getchar()!=EOF));
答案 0 :(得分:2)
不是仅检查Ctrl-D
,而是检查scanf
是否成功。
scanf
将返回1
,以便成功阅读coin
,其他break
来自while
。
if (scanf("%f", &coin) != 1)
break;
同时改变条件
}while (coin != 0 );
答案 1 :(得分:1)
首先ctrl D退出scanf
第二个退出getchar()
这就是原因!
希望这有帮助