C语言循环和输入问题当输入文字时死循环

img


当我输入数字在专业那里的时候不会死循环,当输入文字的时候死循环

void cun(){
     int y;
     printf("输入你的学号:");
     scanf("%d",&y);
     while(y){ 
   printf("输入你的名字:");
   scanf("%s",stu[y].name); 
   printf("输入你的身份证号码:"); 
   scanf("%6d%4d%4d%2d%1d%1d",&stu[y].id1,&stu[y].id2,&stu[y].id3,&stu[y].id4,&stu[y].id5,&stu[y].id6);
   printf("输入你的生日:");
   scanf("%d%d",&stu[y].birthday.month,&stu[y].birthday.day );
   printf("输入你的联系电话:"); 
   scanf("%c\n",&stu[y].dianhua[11]);printf("输入你的班级:");

   scanf("%s\n",stu[y].grade);

   printf("输入你的专业:");

   scanf("%s\n",stu[y].zhuanye );
   printf("输入你的综测成绩:");
   scanf("%d\n",&stu[y].score);
   printf("返回主界面\n");
   main();    
    }
}```

int main(){

page();

int x;
scanf("%d",&x);
while(1){
    switch(x)
        {
case 1:
     cha();break;//查询信息区域 
        case 2:
          cun();break;//存入信息区域 
            case 3:
              shan();break;//删除信息区域
                case 4:
                 lie();break;//列出信息区域 
                    default:printf("输入的信息编号有误");
        } 
        }

}```

基于Monster 组和GPT的调写:
死循环可能是由于使用scanf()函数读取字符串时的格式化错误导致的。在读取字符串时,您不需要使用\n作为格式控制符,因为%s格式控制符自动跳过前导空格,并在遇到下一个空格或新行时停止读取。因此,使用%s而不是%s\n应该解决问题。以下是修改后的cun()函数的代码:

void cun() {
    int y;
    printf("输入你的学号:");
    scanf("%d", &y);
    while (y) {
        printf("输入你的名字:");
        scanf("%s", stu[y].name);
        printf("输入你的身份证号码:");
        scanf("%6d%4d%4d%2d%1d%1d", &stu[y].id1, &stu[y].id2, &stu[y].id3, &stu[y].id4, &stu[y].id5, &stu[y].id6);
        printf("输入你的生日:");
        scanf("%d%d", &stu[y].birthday.month, &stu[y].birthday.day);
        printf("输入你的联系电话:");
        scanf("%s", stu[y].dianhua);
        printf("输入你的班级:");
        scanf("%s", stu[y].grade);
        printf("输入你的专业:");
        scanf("%s", stu[y].zhuanye);
        printf("输入你的综测成绩:");
        scanf("%d", &stu[y].score);
        printf("返回主界面\n");
        main();
    }
}


建议在每次读取数据后,使用getchar()把回车‘\n’给消掉