我收到一份文本文件,这是一家餐馆的菜单。该文件有食物清单和价格。该文件是Ch9_Ex4Data.txt,我需要为客户显示它。我需要使用struct menuItemType和menu类型的menuItem以及double类型的menuPrice。我还需要使用struct的数组,menuList,将数据加载到数组中的函数getData,以及显示菜单的函数showMenu。
我的问题是,在尝试显示菜单时,我会得到与文档本身不相近的不同结果。
以下是我的代码的一部分(我认为不正确的部分):
struct menuItemType
{
string menuItem;
double menuPrice;
};
void welcome()
{
menuItemType menuList[8];
char ready;
int millisecond = 1000;
ifstream infile;
infile.open("Ch9_Ex4Data.txt");
getData(infile, menuList);
...
showMenu(menuList);
...
}
void getData(ifstream& infile, menuItemType menuList[])
{
int i;
for(i= 0; i < 8; i++)
{
infile >> menuList[i].menuItem >> menuList[i].menuPrice;
}
}
void showMenu(menuItemType menuList[])
{
int i;
for(i = 0; i < 8; i++)
{
cout << menuList[i].menuItem << endl;
cout << menuList[i].menuPrice << endl;
}
}
text file:
Plain Egg
1.45
Bacon and Egg
2.45
Muffin
0.99
French Toast
1.99
Fruit Basket
2.49
Cereal
0.69
Coffee
0.50
Tea
0.75
答案 0 :(得分:1)
问题在这里
infile >> menuList[i].menuItem
只会读到白色空格。所以你第一次读书时
menuLIst [i] .menuItem的值为“Plain”
你应该使用getline,默认情况下读取直到行尾
getline(inFile,menuList[i].menuItem);
inFile>>menuLIst[i].menuPrice
inFile.ignore(); //get rid of the carriage return
答案 1 :(得分:0)
我没有你的sample.text 但做这样的事情
pFile = fopen ( "sample.txt" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
//now you have all the data of the file in a string buffer(array)
do operations on it