c - EOF 控制 D 第一次不工作

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

最佳答案

而不是只检查 Ctrl-D , 检查 scanf 是否成功.

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

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

同时改变条件

 }while (coin != 0 );

关于c - EOF 控制 D 第一次不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256718/

相关文章:

C:如何从标准输入读取多个字符串

match - 在 ff 匹配中使用 eof 或输入结束?

C++使用cin.get获取字符,遇到EOF不结束while循环

c - 使用 read() 一次从文件中读取一个字符

c - lkm函数劫持BUG

c - 猜谜游戏的程序输出不正确

c - 了解分页虚拟内存的第一步 : Creating Page Table Entry upon Initial Page Fault

c++ - iperf3 的 C 编译问题

c - 可变长度数组 (VLA) 的边界检查?

c - GNU-getline : strange behaviour about EOF