学生成绩管理系统禁止学号为中文问题
我这个输入中文还是会往下一个进程进行struct Student
{
char name;
char num;
int English_mark;
int Math_mark;
int c_mark;
int avermark;
char sex;
int sum;
};
while(1)
{
printf("该学生的学号为:");
scanf("%s",student->student.num);
getchar();
len=sizeof(student->student.num)/sizeof(char);
if(temp==NULL)
{
break;
}
for(i=0;i<len;i++)
{
if(student->student.num>='0'&&student->student.num<='9')
{
break;
}
else
{
continue;
}
}
while(1)
{
if(!strcmp(student->student.num,temp->student.num)||temp==NULL)
{
break;
}
temp=temp->next;
} 本帖最后由 村里小黑 于 2021-11-5 16:23 编辑
%s输入的是字符串,%d输入的才是整形数据。
你要输入学号是数字,这里改成%d就好了
printf("该学生的学号为:");
scanf("%d",student->student.num); 村里小黑 发表于 2021-11-5 16:15
%s输入的是字符,%d输入的才是整形数据。
你要输入学号是数字,这里改成%d就好了
%s是字符串,%c是字符 jhq999 发表于 2021-11-5 16:21
%s是字符串,%c是字符
感谢提醒,已改正 村里小黑 发表于 2021-11-5 16:23
感谢提醒,已改正
我的学号就是字符串的类型 村里小黑 发表于 2021-11-5 16:23
感谢提醒,已改正
我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作 本帖最后由 jhq999 于 2021-11-5 20:29 编辑
superswagy2002 发表于 2021-11-5 19:36
我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作
struct Student
{
char name;
char num;
int English_mark;
int Math_mark;
int c_mark;
int avermark;
char sex;
int sum;
};
intmain()
{
Student student;
int i=0;
while(1)
{
printf("该学生的学号为:");
scanf("%s",student.num);
getchar();
int len=0;
while (student.num);
for (i = 0; i < len; i++)
{
if (student.num<0)//因为中文参考gbk编码,肯定有字节的值是负数
{
break;
}
}
if (i!=len)
{
break;
}
}
return 0;
} jhq999 发表于 2021-11-5 20:01
还是不行,一输中文就下一个程序了 superswagy2002 发表于 2021-11-5 20:25
还是不行,一输中文就下一个程序了
理解错了我以为有中文就停止循环退出 jhq999 发表于 2021-11-5 20:01
把你那个30行改为if(i==len)就行了 superswagy2002 发表于 2021-11-5 20:27
把你那个30行改为if(i==len)就行了
你知道这个估计自己就能写了
if (student.num<0)//因为中文参考gbk编码,肯定有字节的值是负数
{
break;
} jhq999 发表于 2021-11-5 20:29
你知道这个估计自己就能写了
确实谢谢大佬 {:10_256:} {:10_256:}{:10_266:}{:5_109:} {:10_254:} 可以用循环做判断! {:10_275:} {:10_256:} ..................................... {:10_254:}
页:
[1]