2017-02-10 48 views
0

如果输入的数字不是1或2,那么它会输入正确的输入(默认值)。如果ipnut是一个类似“a”的字母而不是开始垃圾邮件的默认情况。如果输入是字母,则输出默认无限次

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

int main() 
{ 
    int v, kapcs = 0; 
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n"); 

    do 
    { 
     kapcs = 0; 

     scanf("%d", &v); 

     switch (v) 
     { 
      case 1: 
       printf("Igen, o egy kocsog!"); 
       break; 
      case 2: 
       printf("Helytelen... O egy kocsog!"); 
       break; 
      default: 
       printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n"); 
       kapcs = 1; 
       break; 
     } 

    } 
    while (kapcs == 1); 

    return 0; 
} 
+0

所以...预计什么? –

+0

[为什么scanf()在此代码中导致无限循环?](http://stackoverflow.com/questions/1716013/why-is-scanf-causing-infinite-loop-in-this-code) – Brick

回答

0

当你输入的东西,不会在scanf函数所需格式相匹配()该值保留在输入缓冲区中。所以你可以做的是在默认情况下添加一个getchar()。

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

int main() 
{ 
    int v, kapcs = 0; 
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n"); 

    do 
    { 
    kapcs = 0; 

    scanf("%d", &v); 

    switch (v) 
    { 
     case 1: 
      printf("Igen, o egy kocsog!"); 
      break; 
     case 2: 
      printf("Helytelen... O egy kocsog!"); 
      break; 
     default: 
      printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n"); 
      kapcs = 1; 
      getchar(); 
      break; 
    } 

}while(kapcs == 1); 

return 0; 
} 

还能够支持我的观点,你可以做到以下几点: 的#include 的#include

int main() 
{ 
    int v, kapcs = 0; 
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n"); 

    do 
    { 
    kapcs = 0; 

    scanf("%d", &v); 

    switch (v) 
    { 
     case 1: 
      printf("Igen, o egy kocsog!"); 
      break; 
     case 2: 
      printf("Helytelen... O egy kocsog!"); 
      break; 
     default: 
      printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n"); 
      kapcs = 1; 
      printf("%c",getchar()); 
      break; 
    } 

}while(kapcs == 1); 

return 0; 
} 

通过添加这种小的printf(),你会发现的getchar似乎不等待为输入。相反,它只是输出刚才在输入流中提供的那个字符。

P.S. :请注意,这个答案只是为了澄清那个无与伦比的输入部分。如果输入与您的案例不符的号码,您需要小心。在这种情况下,简单地检查scanf()的转换成功与否,采取的是一个数如下:

count=scanf("%d",&v); 

,然后在默认情况下,检查为:

if(count==0){ 
getchar(); 
} 
+0

注意,如果'scanf()'弹出一个不是1或2的十进制字符,'getchar()'可能无限期地被阻塞。 – sturcotte06

0

scanf%d读取十进制数字。不是数字的'a'会留在下一个循环的输入流中 - 永远。如果您想要使用'a',则必须将一行代码添加到默认情况下才能使用它。

但是,您如何区分“a”和“3”?答案是scanf返回转换的参数数量。因此,对于“一”,scanf函数将返回0,并为“3”,scanf函数将返回1

int main() 
{ 
    int v, kapcs = 0; 
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n"); 

    do 
    { 
     kapcs = 0; 

     int cnt = scanf("%d", &v); 

     switch (v) 
     { 
      case 1: 
       printf("Igen, o egy kocsog!"); 
       break; 
      case 2: 
       printf("Helytelen... O egy kocsog!"); 
       break; 
      default: 
       printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n"); 
       kapcs = 1; 
       if (cnt == 0)  /* if input was not a number */ 
        getchar(); /* skip a character of input */ 
       break; 
     } 

    } 
    while (kapcs == 1); 

    return 0; 
} 
相关问题