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:
}
不知道你这个问题是否已经解决, 如果还没有解决的话:标识符就是变量、函数、类型等的名字。
标识符由大小写字母、数字、下划线组成,但不能以数字开头。
C语言是一种大小写敏感的语言,abc、Abc、ABC 是不同的标识符。
标识符的长度没有限制,但标准允许编译器忽略31个字符以后的字符。
C语言的关键字是被保留的,它们是不能作为标识符使用:
do | while | for | case | default |
switch | if | else | break | continue |
goto | int | short | long | char |
float | double | signed | unsigned | struct |
union | enum | const | static | auto |
extern | register | volatile | void | typedef |
sizeof | return |
问题是如何限制用户输入的数据只能是汉字,并且在输入其他字符时产生一个报错。要实现这个功能,可以按照以下步骤进行:
使用C语言中的字符数组来存储用户输入的数据。定义一个字符数组变量来存储输入的数据,例如char input[100];
使用C语言中的字符串输入函数来获取用户输入的数据。例如使用gets(input);
来获取用户输入的数据。注意:gets
函数会从用户输入中获取换行符之前的所有字符,并自动在最后添加一个空字符(\0)来表示字符串的结束。
遍历输入的字符串,判断每个字符是否是汉字。使用C语言中的字符判断函数isCJK()
来判断字符是否是汉字。如果某个字符不是汉字,则产生一个报错。
c int i; for(i = 0; input[i] != '\0'; i++) { if(!isCJK(input[i])) { printf("输入了非汉字字符,请重新输入\n"); return; } }
请注意,在以上步骤中,需要使用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, "")
用于设置程序的本地化环境,以正确识别汉字字符。
请注意,以上代码仅给出了限制只能输入汉字的功能实现,如果需要进一步处理输入的汉字数据,请根据具体需求进行扩展。