2016-12-01 1 views
0

mon tout Cyclus ne fonctionnera pas quand je veux le fermer avec CTRL + Ctout et EOF ne fonctionneront pas

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

Il me montre juste entrée Bad quand je veux fermer CTRL + D. Je veux seulement fermer programme avec return 0;

Répondre

0

Le premier test que vous faites est sur res, et EOF est en fait que le nombre -1, ce qui ne correspond pas à 1, ce qui provoque la première if à résoudre à vrai et revenir avec 1 .

Cela devrait fonctionner:

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

grâce à l'aide, mais un autre problème est quand je Scanf 3.8 ou un numéro double, il appelle mes fonctions un deux trois, puis ce sera printf Bad entrée en raison du nombre double .. Je veux fermer quand ce n'est pas le numéro d'interger avant d'appeler la fonction – blackroad