C语言 eof控制d不起作用



我有相同的问题

为什么我必须按Ctrl D几次才能看到它?

我想退出周期,当我输入数字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));

,而不是仅检查Ctrl-D,而是检查scanf的成功。

scanf将返回1以成功阅读coin,否则break来自while

if (scanf("%f", &coin) != 1)
   break;

也改变条件

 }while (coin != 0 );

第一个ctrl d退出scanf

第二个退出getchar()

这就是为什么!

希望这有帮助

相关内容

最新更新