2015-09-17 65 views
-3
int main(void) 
{ 

'这是我制作的代码' int select; do { system(“CLS”); printf(“\ n1”Add Student“); printf(“\ n2)显示学生”); printf(“\ n3”搜索学生“); printf(“\ n4”按字母排序“); printf(“\ n5”Exit“); printf(“\ nSelect Option:”); 012fscanf(“%d”,& select);如果我们在需要整数的开关情况下输入字符,会发生什么情况C

 switch(select) 
     { 
      case 1: 
      . 
      . 
      break; 
      . 
      . 
      . 
      case 5: 
      printf("\nGoodbye!"); 
      break; 

      default: 
      printf("\nSelect 1-5"); 
      break;   
     } 
     getch(); 
    }while(select != 5); 
} 
+0

不知道上下文,但是之后的scanf( “%d”,&选择); “**”表示该字符不存在 – user5347510

回答

2

首先,scanf("%d", &select);将不会读取任何东西但是从输入流的十进制整数;如果输入的是非数字字符,将不会从输入流中读取任何(意味着select将不会更新,并且scanf将返回值0)。

其次,case '1':不匹配对整数值1,而是针对用于字符(ASCII码的十进制48)恒定'1'的值。因此,如果您在提示时输入1,代码将不会采用case '1':分支。

所以,我建议做以下修改:

do { 
    // print menu as before 

    while (scanf("%d", &select) != 1) 
    { 
    while (getchar() != '\n') // remove everything up to the next newline 
     ; 
    printf("Input a value between 1 and 5: "); 
    fflush(stdout); 
    } 

    switch(select) 
    { 
    case 1: // note no single quotes around 1 
     ... 
     break; 

    case 2: 
     ... 
     break; 

    ... 
    } 
} while (select != 5); 
+0

抱歉问这个问题,但如果我输入1不会是程序退出? – user5347510

+0

@ user5347510:看我的编辑。 –

+0

先生您会告诉我使用getchar()函数以及它属于哪个库fflush(stdout); – user5347510

0

由于字符实际上是一类整数类型,所以输入的数字将与开关盒的ASCII值进行比较。

'1'的情况下,它的ASCII值是49,所以如果你想在49中输入它将匹配'1'的情况。

为了达到预期效果,案件必须更改为数字而不是代表数字的字符,即case 1:而不是case '1':

+0

情况1: 。 。 休息; 。 。 。案例5: printf(“\ n Goodbye!”); 休息; – user5347510

+0

它仍然接受一个循环后的字符或一组单词 – user5347510

+0

@ user5347510究竟是什么意思?你在输入什么,结果是什么,你期望什么? – dbush

相关问题