EOF ctrl D第一次不工作

时间:2014-03-07 17:26:28

标签: c eof

我有同样的问题,比如

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));

2 个答案:

答案 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()

这就是原因!

希望这有帮助