C,文件输入
本帖最后由 GSMNC 于 2017-4-24 21:56 编辑各位大神求指教,为什么我的代码编译通过,但测试出错{:5_100:}
#include <stdio.h>
#include <stdlib.h>
#define total 5
int main()
{
int i;
char ch;
char filename;
FILE *fp;
struct student
{
char name;
char sex;
int num;
int score;
}a;
printf("Please input student's information,including name,sex,num,score.\n");
for(i = 0; i < total; i++)
{
scanf("%s %c %d %d", a.name, &a.sex, &a.num, &a.score);
}
printf("Enter file's name.\n");
scanf("%s", filename);
if ((fp = fopen(filename, "r+")) == NULL)
{
printf("Open operation failed.\n");
exit(0);
}
ch = getchar();
for (i = 0; i < total; i++)
{
if ((fwrite(&a, sizeof(struct student), 1, fp)) != 1)
{
printf("write file fails\n");
}
}
fclose(fp);
printf("Hello world!\n");
return 0;
} 有两处错误:
1、第31行,文件打开方式应该为a+(写追加)
2、第40行,写文件方式不合适,写出的内容是乱码
报错是什么?
我只看到你这个if ((fp = fopen(filename, "r+")) == NULL)
这里只有只读权限没有写权限,然后你后边有写操作肯定不行 fwrite这个函数以二进制形式对文件进行操作。它写入文件是二进制写入的,所以是乱码。
可以使用fprintf函数写入文件。
#include <stdio.h>
#include <stdlib.h>
#define total 5
int main()
{
int i;
char c='\n';
char ch;
char filename;
FILE *fp;
struct student
{
char name;
char sex;
int num;
int score;
}a;
printf("Please input student's information,including name,sex,num,score.\n");
for(i = 0; i < total; i++)
{
scanf("%s %c %d %d", a.name, &a.sex, &a.num, &a.score);
}
printf("Enter file's name.\n");
scanf("%s", filename);
if ((fp = fopen(filename, "r+")) == NULL)
{
printf("Open operation failed.\n");
exit(0);
}
ch = getchar();
for (i = 0; i < total; i++)
{
/* if ((fwrite(a, sizeof(struct student), 3, fp)) != 1)
{
printf("write file fails\n");
}*/
if(fprintf(fp,"%s %c %d %d %c", a.name,a.sex,a.num,a.score,c)<0)
{
printf("write file fails\n");
}
}
fclose(fp);
//printf("Hello world!\n");
return 0;
}
菟纸先森 发表于 2017-4-24 22:21
有两处错误:
1、第31行,文件打开方式应该为a+(写追加)
2、第40行,写文件方式不合适,写出的内容是乱 ...
1、改为“a+”,依然不对。。。
2、40这样写是乱码,能问下原因吗?
lumber2388779 发表于 2017-4-24 22:21
报错是什么?
我只看到你这个if ((fp = fopen(filename, "r+")) == NULL)
这里只有只读权限没有写权限, ...
谢谢您,我翻看了下书,“r+”文件使用方式既可读也可写 bajo 发表于 2017-4-25 14:45
fwrite这个函数以二进制形式对文件进行操作。它写入文件是二进制写入的,所以是乱码。
可以使用fprintf函 ...
{:5_95:}
页:
[1]