2016-03-29 36 views
-1

Sorunum, karakterin scanf'inin atlandığını ve programın tekrar tekrar tekrar programlanıp tekrar edilmediğini görmek için taramayı kontrol etmediğini ya da neden böyle olmadığını kontrol etmemesidir. scanf(" %c", &rep); içinScanf Tarama karakterini atla

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

    int number,check; 
    char rep; 

    printf("Program to check if number is even or odd"); 

    while((rep!='N') || (rep!='n')) 
    { 
     printf("\n\nPlease enter the number: "); 
     scanf("%d",&number); 

     check = number%2; 

     if(check != 0) 
      printf("\nNumber is odd."); 
     else 
      printf("\nNumber is even."); 
     printf("\n"); 

     printf("Do you want to enter number again?\nY=yes\tN=no\n"); 
     scanf("%c", &rep); 
    } 


    return 0; 
} 
+1

Burada yüzlerce (hatta belki binlerce) yinelenen var, ancak sorunun özü, sayıyı okuduktan sonra, satır içi giriş arabelleğindendir. Sonraki "scanf" çağrısının neyi okuduğu Gues ... –

+1

ve 'char rep = 0;' ... '(rep! = 'N' && rep! = 'N') {' – BLUEPIXY

cevap

0

Değişim scanf("%c", &rep);.

Bunun nedeni, bir numarayı ilk kez girdiğinizde, bir '\ n' stdin içinde bırakılır. scanf("%c", &rep); yürütülürken, bu '\ n' hemen scanf() tarafından tüketilir ve rep'a atanır. '\ N', ne 'N' ne de 'n' değerine eşit olduğundan, bu döngü devam eder.

Biçim dizgisindeki öncü boşlukla, okuma başlamadan önce tüm boşluk karakterleri atılır. Sizin durumunuzda, görünmez '\ n' göz ardı edilir, böylece bir karakter girebilirsiniz.

Ayrıca, yerine char rep = 0; yazmalısın, durumunda rep özgün değer 'n' veya 'N' olur.