| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1913 人关注过本帖
标题:求助:关于用fwrite()写入磁盘文件,第一个变量读入出错的问题,具体请看内容 ...
只看楼主 加入收藏
wolf777
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-9-12
收藏
 问题点数:0 回复次数:6 
求助:关于用fwrite()写入磁盘文件,第一个变量读入出错的问题,具体请看内容
源程序如下:
#include "stdio.h"
#include "stdlib.h"
struct student
{
int number;
char name[20];
int age;
}stu[2];
void save()
{
int i;
FILE *fp;
char fln[20];
printf("输入你想保存的文件名:");
scanf("%s",fln);
if((fp=fopen(fln,"w+"))==NULL) //16
{
printf("打开失败!\n");
exit(0);
}
for(i=0;i<2;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) //22
printf("file write error\n");
}
void main()
{
int i;
printf("Input datas of student:\n");
for(i=0;i<2;i++)
{
printf("Input numbers,name,age:\n");
scanf("%d,%s,%d",&stu[i].number,stu[i].name,&stu[i].age);
}
save();
system("pause");
}

输入为:" Input datas of student:
Input numbers,name,age:
101,jkl,20
Input numbers,name,age:
102,mm,18
输入你想保存的文件名:d:\file.txt
请按任意键继续. . .
Press any key to continue "

打开d:\file.txt显示结果为:“e jkl,20 f mm,18 ”
第一项显示错误。
程序第22行不明白用if()是什么意思,完全可改为:fwrite(&stu[i],sizeof(struct student),1,fp)同时其后面一句删掉。
请大家帮忙解答下,先谢了。。。

[此贴子已经被作者于2007-11-4 21:25:33编辑过]

搜索更多相关主题的帖子: 变量 fwrite 磁盘 文件 
2007-11-04 21:23
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

文件打开模式错误


fopen() 接受两个参数,第一个是文件名字符串,第二个是打开方式
如果没有成功打开文件,fopen() 函数返回 NULL,
否则返回 FILE 指针

//--------------------------------------------------------------------//
// 表 13.1 fopen()函数的模式字符串 //
//--------------------------------------------------------------------//
// 模式字符串 | 意义 //
//--------------------------------------------------------------------//
// "r" | 打开一个文本文件,可以读取文件 //
//--------------------------------------------------------------------//
// "w" | 打开一个文本文件,可以写入文件,先将文件的长度截 //
// | 为零。如果该文件不存在则先创建之 //
//--------------------------------------------------------------------//
// "a" | 打开一个文本文件,可以写入文件,向已有文件的结尾 //
// | 追加内容,如果该文件不存在则先创建之 //
//--------------------------------------------------------------------//
// "r+" | 打开一个文本文件,可以进行更新(读取和写入) //
//--------------------------------------------------------------------//
// "w+" | 打开一个文本文件,可以进行更新(读取和写入),如 //
// | 果该文件存在则首先将其长度截为零;如果不存在则先 //
// | 创建之 //
//--------------------------------------------------------------------//
// "a+" | 打开一个文本文件,可以进行更新(读取和写入),向 //
// | 已有文件的尾部追加内容,如果该文件不存在则先创建 //
// | 之;可以读取整个文件,但写入时只能追加内容 //
//--------------------------------------------------------------------//
// "rb", "wb", | 与前面的模式相似,只是使用二进制模式而非文本模式 //
// "ab", "r+b", | 打开文件 //
// "w+b", "a+b", | //
// "rb+", "wb+", | //
// "ab+" | //
//--------------------------------------------------------------------//

[此贴子已经被作者于2007-11-5 1:48:37编辑过]


—>〉Sun〈<—
2007-11-05 01:47
wolf777
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-9-12
收藏
得分:0 

先谢楼上了,程序第16行,我做过改动将"w+"改为"wb"或"wb+"得到的结果都是一样的,还是磁盘文件中第一项错误。。。
原因现在还不知道,这个基本上跟《c程序设计》一样了,是不是书上出错了。。。


我是民工,我怕谁。。。
2007-11-05 08:39
wolf777
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-9-12
收藏
得分:0 
顶啊,高手进来帮忙,众人拾柴火焰高,不会的可以帮着顶下了,共同学习。。。

我是民工,我怕谁。。。
2007-11-06 14:02
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 


/* fwrite() 因该使用二进制模式,写入的是二进制数据。*/

输入为:" Input datas of student:
Input numbers,name,age:
101,jkl,20
Input numbers,name,age:
102,mm,18
输入你想保存的文件名:d:\file.txt
请按任意键继续. . .
Press any key to continue "

打开d:\file.txt显示结果为:“e jkl,20 f mm,18 ”


/* ----------------------------------------------------------
你用把它当文本文件查看当然就是这样的结果

scanf() 函数也有问题。
scanf("%d,%s,%d", &stu[i].number, stu[i].name, &stu[i].age);
“jkl,20” “mm,18” 这其实是第二个字符串 “%s”

fwrite() 函数写入的文件应该使用 frand() 函数查看。
*/

/* scanf("%d %s %d", ... ); 使用空格比逗号更合适 */
/* %s 是读取 逗号的,如果使用逗号,那第三个 stu[i].arc 根本没有被读入值 */


[此贴子已经被作者于2007-11-6 15:26:16编辑过]


—>〉Sun〈<—
2007-11-06 14:32
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 增加了查看文件内容 */
/* fwrite() 写入的文件 要用 fread() 读取 */
/* 函数写法非常不好 */


#include <stdio.h>
#include <stdlib.h>

struct student
{
int number;
char name[20];
int age;

} stu[2];

FILE * fp; /* 文件指针 */

void save(void)
{
int i;
/* 我把这里的 文件指针设为了全局 */
char fln[20];
printf("输入你想保存的文件名:");
scanf("%s", fln);
if((fp=fopen(fln,"wb+")) == NULL)
{
printf("打开失败!\n");
exit(1);
}

for(i=0; i<2; i++)
if(fwrite(&stu[i],sizeof(struct student), 1, fp) != 1)
{
printf("file write error\n");
exit(1);
}
}

void show_stu(struct student * st, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d %s %d\n", st[i].number, st[i].name, st[i].age);
}
putchar('\n');
}

void show_file(void)
{
int i;
struct student file_show[2];

rewind(fp); /* 到文件开始处 */

for(i=0; i<2; i++) /* 把文件中的内容写入到结构数组 */
if(fread(&file_show[i], sizeof(struct student), 1, fp) != 1)
{ /* 内容是从文件中读取的 */
printf("file read error\n");
exit(1);
}

show_stu(&file_show[0], 2); /* 显示结构数组 */
}

int main(void)
{
int i;

printf("Input datas of student:\n");
for(i=0;i<2;i++)
{
printf("Input \"numbers name age\": \n");

/* 下面的循环验证数据 */
while(scanf("%d %s %d", &stu[i].number, stu[i].name, &stu[i].age) != 3)
{
while(getchar() != '\n');
printf("请输入“numbers name age ”,用空格隔开\n");
}
}

save();

printf("写入文件的内容如下:\n");
show_file();

system("pause");
fclose(fp); /* 关闭文件 */
return 0;
}



[此贴子已经被作者于2007-11-6 16:22:08编辑过]


—>〉Sun〈<—
2007-11-06 15:00
wolf777
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-9-12
收藏
得分:0 

我想过用fread()来读,但是我想实现的是建立一个文件,打开就可以查看信息,也可用函数转载。。。
这个要用什么函数实现。。。谢cosdos指教了.


我是民工,我怕谁。。。
2007-11-07 09:13
快速回复:求助:关于用fwrite()写入磁盘文件,第一个变量读入出错的问题,具体请 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017732 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved