虽然和eof不起作用

时间:2016-12-01 21:19:39

标签: c scanf eof

当我想用CTRL + C关闭它时,我的cyclus不会工作

while(1){
    res=scanf("%d",&k); 
    if(res != 1){
        printf("Bad input.\n")
        return 1;
    }
    else if((k <= 0)){
        printf("Bad input.\n");
        return 1;
    }
    if(res == EOF){
        return 0;
    }
    a=one(arr, arr_size, k);
    b=two(arr, arr_size, k);
    c=three(arr, arr_size, k);
    printf("Sum: %d\n",a+b+c);  
}

当我想要关闭它时,它只显示输入错误CTRL + D.我只想用return 0;

关闭程序

1 个答案:

答案 0 :(得分:0)

您执行的第一项测试是res,而EOF实际上只是数字-1,不等于1,导致第一次if 1}}解析为true并返回1

这应该有效:

while(1) {
    res=scanf("%d",&k); 

    /* first check for EOF */
    if(res == EOF){
        return 0;
    }
    /* then check input */
    if(res != 1 || k <= 0) {
        printf("Bad input.\n");
        return 1;
    }
}