void enter() { int i; for(i=0;i<STUDENT_NUM;i++) { if(student[i].no==-1) { break; } } if(i==STUDENT_NUM) { printf("存储已满\n"); } struct Student temp; printf("\n请输入学号:"); scanf("%d",&temp.no); printf("\n请输入姓名:"); getchar(); scanf("%s",&temp.name); printf("\n请输入年龄:"); getchar(); scanf("%d",&temp.age); printf("\n请输入性别:"); scanf("%s",&temp.sex); printf("\n请输入班级:"); getchar(); scanf("%d",&temp.c1ass); printf("\n请输入宿舍:"); getchar(); scanf("%s",&temp.address); printf("\n请输入电话:"); getchar(); scanf("%s",&temp.phone); for(int j=0;j<STUDENT_NUM;j++) { if(student[j].no==temp.no) { printf("\n学生已被录入,请勿重复输入\n"); } } student[i]=temp; } void look() { int i; printf("\n学号 姓名 年龄 性别 班级 宿舍 电话号码\n"); for(i=0;i<STUDENT_NUM;i++) { if(student[i].no!=-1) { printf("%-4d%-4s%-4d%-3s%-4d%-5s%s\n",student[i].no,student[i].name,student[i].age,student[i].sex,student[i].c1ass,student[i].address,student[i].phone); } } printf("\n返回菜单\n"); }中,通过scanf输入的中文在printf输出之后为什么是乱码
时间: 2024-03-19 10:45:56 浏览: 60
C语言中,scanf函数默认使用空格作为输入数据的分隔符,而中文中的空格是全角空格,与英文的半角空格不同,因此在输入中文时,需要使用特殊的格式化字符"%[^\n]"来读取整行输入,防止读取到换行符之前的空格,从而导致乱码问题。
修改代码如下:
```
printf("\n请输入姓名:");
getchar();
scanf("%[^\n]",temp.name); //使用特殊的格式化字符"%[^\n]"来读取整行输入
printf("\n请输入性别:");
scanf("%[^\n]",temp.sex);
printf("\n请输入宿舍:");
scanf("%[^\n]",temp.address);
printf("\n请输入电话:");
scanf("%[^\n]",temp.phone);
```
相关问题
为什么void enter() { int i; for(i=0;i<STUDENT_NUM;i++) { if(student[i].no==-1) { break; } } if(i==STUDENT_NUM) { printf("存储已满\n"); } struct Student temp; printf("\n请输入学号:"); scanf("%d",&temp.no); printf("\n请输入姓名:"); getchar(); scanf("%s",&temp.name); printf("\n请输入年龄:"); getchar(); scanf("%d",&temp.age); printf("\n请输入性别:"); scanf("%s",&temp.sex); printf("\n请输入班级:"); getchar(); scanf("%d",&temp.c1ass); printf("\n请输入宿舍:"); getchar(); scanf("%s",&temp.address); printf("\n请输入电话:"); getchar(); scanf("%s",&temp.phone); for(int j=0;j<STUDENT_NUM;j++) { if(student[j].no==temp.no) { printf("\n学生已被录入,请勿重复输入\n"); } } student[i]=temp;输入的中文,在用printf输出的时候会变成乱码?
这是因为中文字符在计算机中是以Unicode编码形式存储的,而printf函数默认使用的是ASCII编码输出,这会导致中文字符被错误地解析和显示。解决方法可以使用支持Unicode编码输出的函数,比如wprintf函数,或者在输出中文字符前,先设置输出编码为UTF-8或者GBK等支持中文字符的编码方式。
#include <stdio.h> #include <stdlib.h> #define SIZE 5 struct Student_type { char name[5]; int num; int age; char addr[15]; }stud[SIZE]; void save() { FILE *fp; int i; if((fp=fopen("stu10-4.txt","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1) printf("file write error\n"); //fcolse(fp); } void load() { FILE *fp; int i; if((fp=fopen("stu_list","rb"))==NULL) { printf("cannot open file\n"); exit(0); } for(i=0;i<SIZE;i++) if(fread(&stud[i],sizeof(struct Student_type),1,fp)!=1) { if(feof(fp)) { fclose(fp); return; } printf("file read error\n"); } printf("load end\n"); //fcolse(fp); } int main() { int i; printf("Please enter data of students:\n"); // for(i=0;i<SIZE;i++) // scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); load(); for(i=0;i<SIZE;i++) printf("%10s,%5d,%5d%20s\n",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); save(); return 0; }
这是一个 C 语言程序,实现了读写文件的功能,可以将学生信息存储到文件中,并从文件中读取信息并输出。程序中定义了一个结构体 Student_type,包含学生的姓名、学号、年龄和地址。首先定义了一个数组 stud 存储学生信息,然后通过 load 函数从文件中读取信息,如果文件不存在则输出错误信息并退出程序;如果读取信息时发生错误,则输出错误信息。接着通过 save 函数将学生信息写入文件中,如果文件无法打开则输出错误信息。最后在主函数中输出学生信息并保存到文件中。
阅读全文