c/c++ 如何将一个int型以字符串的形式写入文件
5个回答
展开全部
第一个问题:
void save(struct classdata *head)
函数的返回类型定义为void,建议修改为int或其他类型,总之应有返回值,因为函数的调用者是关心该函数的运行结果的。
第二个问题:
if((text=fopen(data,"wb+"))==NULL)
{printf("文件打开失败\n");
//通常这里需要返回,因为fopen操作已经失败了,后面的操作无法正确执行,应该向函数调用者返回一个错误值。不过你的这个函数声明为void类型,无法返回值,会影响到对程序的控制(因为函数的调用者不知道调用后函数的执行结果是正常结束的还是异常结束的)。
}
第三个问题:
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1); //这一行最后的分号应删除
//这里;应该加一个左花括号
printf("数据写入失败\n");
// 这里应该加一个右花括号
head=head->transverse;
}
修改后
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("数据写入失败\n");
//注1:这里应返回一个错误值
}
head=head->transverse;
}
注1:这里有与问题二同样的情况,没有对可能出现的异常情况进行判断和处理,所以,即使发生异常,循环仍会继续进行直到最后一条记录(当fwrite出现一次异常,通常之后的操作也不会正常完成),如你的代码,就会反复输出"数据写入失败"字样。
对于你的应用程序来说,可能没有太多条记录(学生数再多也就是百或者千数量级的),所以表面上可能看不出来有什么影响。在实际的软件工程项目中,操作的如果是以百万或千万数量级的记录数(如数据库),效率上就会有很大的差别。建议养成良好的习惯,对可能出现的异常要进行判断和处理。
实际上,一个函数的代码中,真正完成函数功能的代码可能很少,但用于异常情况的判断和处理的代码可能会是实现函数功能代码的N多倍,这样才可以作出坚固、稳定的程序。
综上,个人给出建议的代码:
int save(struct classdata *head)
{
FILE *text;
char data[255]; //这里有改动,文件名字符串长度建议长一些
printf("请输入你要建立的文本名字:");
scanf("%s",data);
if((text=fopen(data,"wb+"))==NULL)
{
printf("文件打开失败\n");
return -1;
}
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("数据写入失败\n");
return -2;
}
head=head->transverse;
}
return 0;
}
void save(struct classdata *head)
函数的返回类型定义为void,建议修改为int或其他类型,总之应有返回值,因为函数的调用者是关心该函数的运行结果的。
第二个问题:
if((text=fopen(data,"wb+"))==NULL)
{printf("文件打开失败\n");
//通常这里需要返回,因为fopen操作已经失败了,后面的操作无法正确执行,应该向函数调用者返回一个错误值。不过你的这个函数声明为void类型,无法返回值,会影响到对程序的控制(因为函数的调用者不知道调用后函数的执行结果是正常结束的还是异常结束的)。
}
第三个问题:
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1); //这一行最后的分号应删除
//这里;应该加一个左花括号
printf("数据写入失败\n");
// 这里应该加一个右花括号
head=head->transverse;
}
修改后
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("数据写入失败\n");
//注1:这里应返回一个错误值
}
head=head->transverse;
}
注1:这里有与问题二同样的情况,没有对可能出现的异常情况进行判断和处理,所以,即使发生异常,循环仍会继续进行直到最后一条记录(当fwrite出现一次异常,通常之后的操作也不会正常完成),如你的代码,就会反复输出"数据写入失败"字样。
对于你的应用程序来说,可能没有太多条记录(学生数再多也就是百或者千数量级的),所以表面上可能看不出来有什么影响。在实际的软件工程项目中,操作的如果是以百万或千万数量级的记录数(如数据库),效率上就会有很大的差别。建议养成良好的习惯,对可能出现的异常要进行判断和处理。
实际上,一个函数的代码中,真正完成函数功能的代码可能很少,但用于异常情况的判断和处理的代码可能会是实现函数功能代码的N多倍,这样才可以作出坚固、稳定的程序。
综上,个人给出建议的代码:
int save(struct classdata *head)
{
FILE *text;
char data[255]; //这里有改动,文件名字符串长度建议长一些
printf("请输入你要建立的文本名字:");
scanf("%s",data);
if((text=fopen(data,"wb+"))==NULL)
{
printf("文件打开失败\n");
return -1;
}
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("数据写入失败\n");
return -2;
}
head=head->transverse;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iomanip.h>
#include<fstream.h>
void main()
{
int n = 65535;
strstream ss;
string s;
ss << n;
ss >> s;
ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它
if(!f1)return; //打开文件失败则结束运行
f1<<"int:"<<s<<endl; //使用插入运算符写文件内容
f1.close(); //关闭文件
}
#include<fstream.h>
void main()
{
int n = 65535;
strstream ss;
string s;
ss << n;
ss >> s;
ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它
if(!f1)return; //打开文件失败则结束运行
f1<<"int:"<<s<<endl; //使用插入运算符写文件内容
f1.close(); //关闭文件
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是MFC的话,
int a=123;
CString b;
b.format("%d",a);
然后用CFile类把b的内容写入文件即可
int a=123;
CString b;
b.format("%d",a);
然后用CFile类把b的内容写入文件即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
#include "string.h"
main()
{
char aa[100];
FILE *fp;
gets(aa);
fp = fopen("test.txt","wt");
fwrite(aa,strlen(aa),1,fp);
fclose(fp);
}
#include "string.h"
main()
{
char aa[100];
FILE *fp;
gets(aa);
fp = fopen("test.txt","wt");
fwrite(aa,strlen(aa),1,fp);
fclose(fp);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询