文件位置标记
各位大神,请教一下,程序编译通过,测试出现乱码,为什么?{:5_94:}#include <stdio.h>
#include <stdlib.h>
struct student_infor
{
int num;
char name;
int id;
char sex;
int score;
}stu;
int main()
{
int i;
FILE *fp;
char filename;
printf("Enter file name:\n");
scanf("%s", filename);
if ((fp = fopen(filename, "rb")) == NULL) /* 如果打开文件失败,退出 */
{
printf("Open file fails.\n");
exit(0);
}
/* 输出第1,3,5,7,9个学生的数据 */
for(i = 0; i < 10; i += 2)
{
fseek(fp, (i * sizeof(struct student_infor)), 0); /* 移动文件位置标记分别至第1,3,5,7,9个学生数据开头 */
fread(&stu, sizeof(struct student_infor), 1, fp); /* 读一个学生的数据到stu[] */
printf("%-3d, %-10s, %-10d, %c, %-5d\n", stu.num, stu.name, stu.id, stu.sex, stu.score); /* 输出 */
}
fclose(fp);
printf("\nHello world!\n");
return 0;
} 什么乱码 , 看看
qq1242009750 发表于 2017-4-26 22:53
什么乱码 , 看看
可能是你文本中没有‘\0’,读取到结构体时,结构体的数组没有‘\0’,然后输出数组的时候会乱码!{:10_260:} #include <stdio.h>
#include <stdlib.h>
struct student_infor
{
int num;
char name;
char sex;
}stu,stu1;
void WriteFopen()
{
int i;
FILE *fp;
if ((fp = fopen("123.txt", "w+")) == NULL)
{
printf("错误!\n");
getchar();
exit(0);
}
for (i = 0; i < 10; ++i)
{
printf("请输入学号(数字):");
scanf("%d", &stu.num);
getchar();
printf("请输入名字:");
scanf("%s", &stu.name);
getchar();
printf("请输入性别:");
scanf("%c", &stu.sex);
getchar();
}
for (i = 0; i < 10; ++i)
{
fwrite(&stu, sizeof(struct student_infor), 1, fp);
}
fclose(fp);
return;
}
int main()
{
WriteFopen();
int i;
FILE *fp;
char filename;
printf("Enter file name:\n");
scanf("%s", filename);
getchar();
if ((fp = fopen(filename, "rb")) == NULL) /* 如果打开文件失败,退出 */
{
printf("Open file fails.\n");
exit(0);
}
/* 输出第1,3,5,7,9个学生的数据 */
for (i = 0; i < 10; i += 2)
{
//fseek(fp, (i * sizeof(struct student_infor)), SEEK_CUR); /* 移动文件位置标记分别至第1,3,5,7,9个学生数据开头 */
fread(&stu1, sizeof(struct student_infor), 1, fp); /* 读一个学生的数据到stu[] */
printf("%-3d, %-10s, %c\n", stu1.num, stu1.name, stu1.sex); /* 输出 */
}
fclose(fp);\
printf("\nHello world!\n");
getchar();
return 0;
} 文件是怎么样的咯?你以rb 模式打开的,二进制只读模式
页:
[1]