鱼C论坛

 找回密码
 立即注册
查看: 1924|回复: 19

[已解决]学生成绩管理系统禁止学号为中文问题

[复制链接]
发表于 2021-11-5 16:08:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我这个输入中文还是会往下一个进程进行
  1. struct Student
  2. {
  3.         char name[40];
  4.         char num[10];
  5.         int English_mark;
  6.         int Math_mark;
  7.         int c_mark;
  8.         int avermark;
  9.         char sex;
  10.         int sum;
  11. };
复制代码

  1.         while(1)
  2.         {
  3.                 printf("该学生的学号为:");
  4.                 scanf("%s",student->student.num);
  5.                 getchar();
  6.                 len=sizeof(student->student.num)/sizeof(char);
  7.                 if(temp==NULL)
  8.                 {
  9.                         break;
  10.                 }
  11.                 for(i=0;i<len;i++)
  12.                 {
  13.                         if(student->student.num[i]>='0'&&student->student.num[i]<='9')
  14.                         {
  15.                                 break;
  16.                         }
  17.                         else
  18.                         {
  19.                                 continue;
  20.                         }
  21.                 }
  22.                 while(1)
  23.                 {
  24.                         if(!strcmp(student->student.num,temp->student.num)||temp==NULL)
  25.                         {
  26.                                 break;
  27.                         }
  28.                         temp=temp->next;
  29.                 }
复制代码
最佳答案
2021-11-5 20:01:00
本帖最后由 jhq999 于 2021-11-5 20:29 编辑
superswagy2002 发表于 2021-11-5 19:36
我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作

  1. struct Student
  2. {
  3.         char name[40];
  4.         char num[10];
  5.         int English_mark;
  6.         int Math_mark;
  7.         int c_mark;
  8.         int avermark;
  9.         char sex;
  10.         int sum;
  11. };
  12. int  main()
  13. {
  14.         Student student;
  15.         int i=0;
  16.         while(1)
  17.         {
  18.                 printf("该学生的学号为:");
  19.                 scanf("%s",student.num);
  20.                 getchar();
  21.                                 int len=0;
  22.                                 while (student.num[len++]);
  23.                                 for (i = 0; i < len; i++)
  24.                                 {
  25.                                         if (student.num[i]<0)//因为中文参考gbk编码,肯定有字节的值是负数
  26.                                         {
  27.                                                 break;
  28.                                         }
  29.                                 }
  30.                                 if (i!=len)
  31.                                 {
  32.                                                 break;
  33.                                 }
  34.         }     
  35.         return 0;
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 16:15:41 | 显示全部楼层

回帖奖励 +1 鱼币

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

%s输入的是字符串,%d输入的才是整形数据。
你要输入学号是数字,这里改成%d就好了
  1.                 printf("该学生的学号为:");
  2.                 scanf("%d",student->student.num);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 16:21:53 | 显示全部楼层

回帖奖励 +1 鱼币

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

%s是字符串,%c是字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 16:23:36 | 显示全部楼层
jhq999 发表于 2021-11-5 16:21
%s是字符串,%c是字符

感谢提醒,已改正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-5 19:36:01 | 显示全部楼层

我的学号就是字符串的类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-5 19:36:51 | 显示全部楼层

我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 20:01:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2021-11-5 20:29 编辑
superswagy2002 发表于 2021-11-5 19:36
我想解决的问题是那个学号里我输中文的话,就会重新在执行一遍,我想完成这个操作

  1. struct Student
  2. {
  3.         char name[40];
  4.         char num[10];
  5.         int English_mark;
  6.         int Math_mark;
  7.         int c_mark;
  8.         int avermark;
  9.         char sex;
  10.         int sum;
  11. };
  12. int  main()
  13. {
  14.         Student student;
  15.         int i=0;
  16.         while(1)
  17.         {
  18.                 printf("该学生的学号为:");
  19.                 scanf("%s",student.num);
  20.                 getchar();
  21.                                 int len=0;
  22.                                 while (student.num[len++]);
  23.                                 for (i = 0; i < len; i++)
  24.                                 {
  25.                                         if (student.num[i]<0)//因为中文参考gbk编码,肯定有字节的值是负数
  26.                                         {
  27.                                                 break;
  28.                                         }
  29.                                 }
  30.                                 if (i!=len)
  31.                                 {
  32.                                                 break;
  33.                                 }
  34.         }     
  35.         return 0;
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-5 20:25:26 | 显示全部楼层

还是不行,一输中文就下一个程序了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 20:26:28 | 显示全部楼层
superswagy2002 发表于 2021-11-5 20:25
还是不行,一输中文就下一个程序了


理解错了我以为有中文就停止循环退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-5 20:27:58 | 显示全部楼层

把你那个30行改为if(i==len)就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 20:29:20 | 显示全部楼层
superswagy2002 发表于 2021-11-5 20:27
把你那个30行改为if(i==len)就行了

你知道这个估计自己就能写了
  1. if (student.num[i]<0)//因为中文参考gbk编码,肯定有字节的值是负数
  2.                                         {
  3.                                                 break;
  4.                                         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-5 20:33:13 | 显示全部楼层
jhq999 发表于 2021-11-5 20:29
你知道这个估计自己就能写了

确实谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 21:09:33 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 21:19:40 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 21:46:58 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-6 09:10:55 | 显示全部楼层

回帖奖励 +1 鱼币

可以用循环做判断!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-6 19:12:05 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 12:49:45 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 14:17:26 | 显示全部楼层

回帖奖励 +1 鱼币

.....................................
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-8 08:51:52 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表