c语言如何让显示的数据只能显示汉字,输入其它字符会报错,求帮助

c语言如何让显示的数据只能显示汉字,输入其它字符会报错

typedef struct student
{ int qinshi;
  int chuangwei;
  char name[20];
  char phone[12];
  long num;
}STU;
void shuru()
{ int i,n;
  STU a;
  FILE *fp;
  fp=fopen("D:\\学生宿舍系统.dat","wb");
  if(fp==NULL)
  { printf("!");return;}
  system("cls");
    printf("录入的个数是: ");
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {    printf("\t寝室号:");
       scanf("%d",&a.qinshi);
       printf("\t床  位:");
       scanf("%d",&a.chuangwei);
       printf("\t姓  名:");
       scanf("%s",a.name);
       printf("\t手机号:");
       scanf("%s",a.phone);
       printf("\t学  号:");
       scanf("%ld",&a.num);
    fwrite(&a,sizeof(STU),1,fp);
  }
   fclose(fp);
}

就是说,想让姓名只能输入汉字,求帮助

printf("\t姓  名:");
scanf("%s",a.name);

修改为

while (1)
{
    printf("\t姓  名:");
    scanf("%s",a.name);
    for (int ii = 0; ii < a.name; ii++)
         if (a.name[ii] <= 0x4E00 && a.name[ii] >= 0x9FA5)
            goto repeat;
    break;
repeat:
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7653035
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言实现可写入文件的账号密码登录系统,密码输入时掩盖,登录界面菜单选择,更改密码系统,课设必备。
  • 除此之外, 这篇博客: 【C语言】标识符、数据类型、运算符和表达式中的 一、标识符 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    标识符就是变量、函数、类型等的名字。

    标识符由大小写字母、数字、下划线组成,但不能以数字开头。

    C语言是一种大小写敏感的语言,abc、Abc、ABC 是不同的标识符。

    标识符的长度没有限制,但标准允许编译器忽略31个字符以后的字符。

    C语言的关键字是被保留的,它们是不能作为标识符使用:

    dowhileforcasedefault
    switchifelsebreakcontinue
    gotointshortlongchar
    floatdoublesignedunsignedstruct
    unionenumconststaticauto
    externregistervolatilevoidtypedef
    sizeofreturn   

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题是如何限制用户输入的数据只能是汉字,并且在输入其他字符时产生一个报错。要实现这个功能,可以按照以下步骤进行:

    1. 使用C语言中的字符数组来存储用户输入的数据。定义一个字符数组变量来存储输入的数据,例如char input[100];

    2. 使用C语言中的字符串输入函数来获取用户输入的数据。例如使用gets(input);来获取用户输入的数据。注意:gets函数会从用户输入中获取换行符之前的所有字符,并自动在最后添加一个空字符(\0)来表示字符串的结束。

    3. 遍历输入的字符串,判断每个字符是否是汉字。使用C语言中的字符判断函数isCJK()来判断字符是否是汉字。如果某个字符不是汉字,则产生一个报错。

    c int i; for(i = 0; input[i] != '\0'; i++) { if(!isCJK(input[i])) { printf("输入了非汉字字符,请重新输入\n"); return; } }

    1. 如果用户输入的数据都是汉字,则继续执行后续的代码逻辑。

    请注意,在以上步骤中,需要使用C语言中的字符处理函数来实现判断字符是否为汉字的功能。具体的实现代码如下:

    #include <stdio.h>
    #include <stdbool.h>
    #include <ctype.h>
    #include <locale.h>
    
    bool isCJK(char c) {
        // 使用C语言中的字符处理函数iswctype()来判断字符是否为汉字
        return iswctype(c, get_wctype("CJK"));
    }
    
    int main() {
        setlocale(LC_ALL, "");
    
        char input[100];
    
        printf("请输入只包含汉字的数据:");
        gets(input);
    
        int i;
        for (i = 0; input[i] != '\0'; i++) {
            if (!isCJK(input[i])) {
                printf("输入了非汉字字符,请重新输入\n");
                return 0;
            }
        }
    
        printf("输入的数据只包含汉字\n");
    
        return 0;
    }
    

    以上代码中,isCJK()函数使用了iswctype()函数来判断字符是否为汉字。get_wctype("CJK")用于获取表示汉字字符类别的宽字符类型对象。setlocale(LC_ALL, "")用于设置程序的本地化环境,以正确识别汉字字符。

    请注意,以上代码仅给出了限制只能输入汉字的功能实现,如果需要进一步处理输入的汉字数据,请根据具体需求进行扩展。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^