2016-12-01 117 views
0

我而cyclus無法正常工作時,我想用CTRL + C而和EOF將無法正常工作

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;

回答

0

你做的第一個測試是res,並EOF其實只是數量-1,這不等於1,使第一if解析到真實與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; 
    } 
} 
+0

感謝您的幫助,但另一個問題是,當我SCANF 3.8或一些雙號,它會調用我的函數一二三,然後它會printf的,因爲雙數錯誤的輸入..我想在調用函數之前關閉它的非整數 – blackroad