user-0 提问: C语言中的switch问题

回复:
user: user-1
content: 引用 10楼我是你的主体 的回复:[quote=引用 9 楼 qq423399099 的回复:] 楼主要清理输入缓冲区 scanf("%c",&k);前面加一句fflush(stdin); 问题解决了。多谢了。 对了，这个应该不需要在后面的程序再加一次了吧[/quote]用%c读取要注意之前输入缓冲区遗留下来的字符，特别是之前输入遗留下的回车符

user: user-0
content: 引用 9 楼 qq423399099 的回复:楼主要清理输入缓冲区 scanf("%c",&k);前面加一句fflush(stdin); 问题解决了。多谢了。 对了，这个应该不需要在后面的程序再加一次了吧

user: user-1
content: 楼主要清理输入缓冲区 scanf("%c",&k);前面加一句fflush(stdin);

user: user-0
content: 引用 6 楼 qq423399099 的回复:[quote=引用 5 楼 ai977313677 的回复:] [quote=引用 2 楼 user-2 的回复:] case 0: 改成 case ‘0’:   其他的case同样改了  数值与数字字符是不同的 改正之后他还是会跳过这一段程序，直接到下一段程序了[/quote] 建议楼主再贴一下代码[/quote] 这个有办法解决吗？

user: user-0
content: 这是整个完整的程序 #include <stdio.h> #include <string.h> #include <stdlib.h> #define LEN 20 #define length sizeof(struct drugs)  enum tuse {for_extern_use,take_orally}; //枚举药品的用法  enum ttype {pill_for_cold,stomachace_medicine,antiphlogistic_drug,eyedrop}; //枚举药品类型  struct Usage {     char dosage[LEN];  //一次用量 }; //药品的使用方法  struct Drugs {     char name[LEN];     int num[LEN];     char date_PD[LEN];     char date_VD[LEN];     char date_Exp[LEN];     enum ttype type;     enum tuse use;     char usage[LEN];     struct Drugs *next; }; //药品的主要信息  /*引导录入药品相关信息*/   struct Drugs  inputdrug(void) {     char choose[5];     struct Drugs medicine;     char r,k;     printf("***新的药品***\n");     printf("请输入药品名:");     scanf("%s",medicine.name);                                      //药品名     printf("\n请输入药品编号(12位):");     scanf("%12d",medicine.num);                                     //药品编号     printf("\n该药品是否具有生产日期信息(yes or no):");     scanf("%s",&choose);     if(strcmp(choose,"yes")==0)     {         printf("\n请输入生产日期:");         scanf("%s",medicine.date_PD);     }         else if((strcmp(choose,"no"))==0)         {             printf("该药品的生产日期信息暂缺\n");             strcpy(medicine.date_PD,"lost");         }                                    //生产日期     printf("\n该药品是都否具有有效期信息(yes or no):");     scanf("%s",&choose);     if(strcmp(choose,"yes")==0)     {         printf("\n请输入有效期:");         scanf("%s",medicine.date_VD);     }         else if((strcmp(choose,"no"))==0)             {                 printf("该药品的有效期信息暂缺\n");                 strcpy(medicine.date_VD,"lost");             }                                   //有效期     printf("\n该药品是否具有失效日期信息(yes or no):");     scanf("%s",&choose);     if(strcmp(choose,"yes")==0)     {         printf("\n请输入失效日期:");         scanf("%s",medicine.date_Exp);     }          else if((strcmp(choose,"no"))==0)         {              printf("该药品的失效日期信息暂缺\n");              strcpy(medicine.date_Exp,"lost");         }                                  //失效日期     printf("\n请选择药品类型(0:感冒药，1:胃药，2:消炎药，3:眼药水):");     scanf("%c",&k);     switch (k)     {         case '0': medicine.type=pill_for_cold;break;         case '1': medicine.type=stomachace_medicine;break;         case '2': medicine.type=antiphlogistic_drug;break;         case '3': medicine.type=eyedrop;     }                                                  //药品种类     printf("\n请选择使用方法(0:口服,1:外用):");     scanf("%c",&r);     switch (r)     {         case '0': medicine.use=take_orally;break;         case '1': medicine.use=for_extern_use;     }                                                 //用法     printf("\n请输入用量(一次):");     scanf("%s",medicine.usage);                                                 //用量 };   /*输出某个药品信息*/  void print_out(struct Drugs * drug0) {     printf("****药品信息如下****");     printf("\n药品名:%s",drug0->name);     printf("\n药品编号:%d",drug0->num);     printf("\n生产日期:%d",drug0->date_PD);     printf("\n失效日期:%d",drug0->date_Exp);     printf("\n有效期:%D",drug0->date_VD);     printf("\ntype:");     switch (drug0->type)     {         case pill_for_cold : printf("感冒药\n");break;         case stomachace_medicine : printf("胃药\n");break;         case antiphlogistic_drug : printf("消炎药\n");break;         case eyedrop : printf("眼药水\n");     }     printf("\n用法:");     switch (drug0->use)     {         case for_extern_use : printf("外用\n");break;         case take_orally : printf("口服\n");     }     printf("用量:",drug0->usage); }  int main () {     inputdrug();     search();     return 0; }  然后出问题的程序是 printf("\n请选择药品类型(0:感冒药，1:胃药，2:消炎药，3:眼药水):");     scanf("%c",&k);     switch (k)     {         case '0': medicine.type=pill_for_cold;break;         case '1': medicine.type=stomachace_medicine;break;         case '2': medicine.type=antiphlogistic_drug;break;         case '3': medicine.type=eyedrop;     } 这一段

user: user-1
content: 引用 5 楼 ai977313677 的回复:[quote=引用 2 楼 user-2 的回复:] case 0: 改成 case ‘0’:   其他的case同样改了  数值与数字字符是不同的 改正之后他还是会跳过这一段程序，直接到下一段程序了[/quote] 建议楼主再贴一下代码

user: user-0
content: 引用 2 楼 user-2 的回复:case 0: 改成 case ‘0’:   其他的case同样改了  数值与数字字符是不同的 改正之后他还是会跳过这一段程序，直接到下一段程序了

user: user-1
content: 楼上正解，还要保证你的k是char类型的 或者就要%d来读，k也变成int k

user: user-0
content: 刚才按你说的改了一下，但是这个就算是改成字符型的，他还是会直接跳过这段代码直接运行下一段

user: user-2
content: case 0: 改成 case ‘0’:   其他的case同样改了  数值与数字字符是不同的

user: user-0
content: 然后运行的时候这段程序只会出现这个信息，也就是说运行会跳过这段程序，这是什么原因