superswagy2002 发表于 2021-11-5 16:08:03

学生成绩管理系统禁止学号为中文问题

我这个输入中文还是会往下一个进程进行
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:15:41

本帖最后由 村里小黑 于 2021-11-5 16:23 编辑

%s输入的是字符串,%d输入的才是整形数据。
你要输入学号是数字,这里改成%d就好了
                printf("该学生的学号为:");
                scanf("%d",student->student.num);

jhq999 发表于 2021-11-5 16:21:53

村里小黑 发表于 2021-11-5 16:15
%s输入的是字符,%d输入的才是整形数据。
你要输入学号是数字,这里改成%d就好了

%s是字符串,%c是字符

村里小黑 发表于 2021-11-5 16:23:36

jhq999 发表于 2021-11-5 16:21
%s是字符串,%c是字符

感谢提醒,已改正

superswagy2002 发表于 2021-11-5 19:36:01

村里小黑 发表于 2021-11-5 16:23
感谢提醒,已改正

我的学号就是字符串的类型

superswagy2002 发表于 2021-11-5 19:36:51

村里小黑 发表于 2021-11-5 16:23
感谢提醒,已改正

我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作

jhq999 发表于 2021-11-5 20:01:00

本帖最后由 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;
}

superswagy2002 发表于 2021-11-5 20:25:26

jhq999 发表于 2021-11-5 20:01


还是不行,一输中文就下一个程序了

jhq999 发表于 2021-11-5 20:26:28

superswagy2002 发表于 2021-11-5 20:25
还是不行,一输中文就下一个程序了

理解错了我以为有中文就停止循环退出

superswagy2002 发表于 2021-11-5 20:27:58

jhq999 发表于 2021-11-5 20:01


把你那个30行改为if(i==len)就行了

jhq999 发表于 2021-11-5 20:29:20

superswagy2002 发表于 2021-11-5 20:27
把你那个30行改为if(i==len)就行了

你知道这个估计自己就能写了
if (student.num<0)//因为中文参考gbk编码,肯定有字节的值是负数
                                        {
                                                break;
                                        }

superswagy2002 发表于 2021-11-5 20:33:13

jhq999 发表于 2021-11-5 20:29
你知道这个估计自己就能写了

确实谢谢大佬

100gram 发表于 2021-11-5 21:09:33

{:10_256:}

zhsguitar 发表于 2021-11-5 21:19:40

{:10_256:}{:10_266:}{:5_109:}

tianlai7266 发表于 2021-11-5 21:46:58

{:10_254:}

我叫PCA 发表于 2021-11-6 09:10:55

可以用循环做判断!

noah-py 发表于 2021-11-6 19:12:05

{:10_275:}

1molHF 发表于 2021-11-7 12:49:45

{:10_256:}

happy___ 发表于 2021-11-7 14:17:26

.....................................

阿萨德按时 发表于 2021-11-8 08:51:52

{:10_254:}
页: [1]
查看完整版本: 学生成绩管理系统禁止学号为中文问题