[英]Write into a file using fstream
我尝试使用以下代码使用fstream
写入文件。 它接受第一个条目,当我按Enter键时 ,它将进入菜单的无限循环,而不是允许我输入第二个和第三个条目。
我怎样才能解决这个问题?
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
struct Course { // structure definition
char cID[3];
char title[40];
int creaditHour;
};
void showChoices();
void writeCourse(fstream& file, char fileName[]);
int main ()
{
fstream database;
char filename[]="course.dat";
int choice;
do
{
showChoices();
cin >> choice;
switch (choice)
{
case 1:
// function call to write courses data
writeCourse(database, filename);
break;
case 2:
// call function
break;
case 3:
// call function
break;
case 4:
// call function
break;
case 5:
// call function
break;
case 6:
exit(1);
break;
default:
cout<<"invalid input"<<endl;
}
}while (choice !=6);
getchar();
return 0;
}
void showChoices()
{
cout<< "Menu"<< endl;
cout<< "1 : Enter Courses Data"<< endl;
cout<< "2 : Enter ...."<< endl;
cout<< "3 : Enter....."<< endl;
cout<< "4 : Display ..."<< endl;
cout<< "5 : Display Course Data"<< endl;
cout<< "6 : Exit"<< endl;
cout<< "Enter your choice:";
}
void writeCourse(fstream& aFile, char filename[])
{
Course courseData= {};//initialization
aFile.open(filename,std::ios::out);
if (!aFile)
{
cout << "file opened for writing failed" << endl;
exit (-1);
}
cout << endl;
cout << "Begin Writing of " << filename << endl;
cout << "Enter course ID, title, and creadit Hour\n? " << endl;
for (int count=0; count<3;count++)
{
cin >>courseData.cID>>courseData.title>>courseData.creaditHour;
}
aFile.close();
cout << "File name " << filename << " closed" << endl;
cout << endl;
}
因为输入的数据类型错误,所以要存储。 代码没有错。
courseDate.creadithour
是Course
结构的int
,因此当您输入char
类型时,会出现错误循环。
我的方法是将Course
结构中的所有内置类型都更改为字符串,并确定输入是数字还是字母。
在函数writeCourse()
,您需要删除输入流周围的for循环,以便每个字段的每个字段将被准确输入一次。 另外,您需要将输出写入文件course.dat
以便将每个输入的记录保存在该文件中。 将文件打开模式设置为“追加”,以便保存所有条目。 代码如下:
void writeCourse(fstream& aFile, char filename[])
{
Course courseData;//initialization
aFile.open(filename, std::fstream::out | std::fstream::app);
if (!aFile)
{
cout << "file opened for writing failed" << endl;
exit (-1);
}
cout << endl;
cout << "Begin Writing of " << filename << endl;
cout << "Enter course ID, title, and creadit Hour\n" << endl;
cin >> &courseData.cID[0] >> &courseData.title[0] >> courseData.creaditHour;
aFile << &courseData.cID[0] << endl;
aFile << &courseData.title[0] << endl;
aFile << courseData.creaditHour << endl;
aFile.close();
cout << "File name " << filename << " closed" << endl;
cout << endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.