gpt4 book ai didi

c++ - 将文本文件中的数据读入结构数组

转载 作者:行者123 更新时间:2023-11-28 07:39:30 25 4
gpt4 key购买 nike

我以前见过这个问题,但找不到可以帮助我解决问题的答案。这里发生了一些事情。这将显示一个菜单,允许用户:

  1. 查看费用,
  2. 更新费用,或
  3. 退出以返回上一个菜单。

此信息被保存到一个数据文件中,该文件应该被输入和输出到。尝试查看文件中的数据时,第一个菜单选项出现问题。假设已经有一个包含以下信息的数据文件 C:\danceexpenses.txt:

DJ
100
Site
100
Food
100
Favors
100
Security
100
Ticket printing
100
Etc.
100
etc.
100

程序不会显示信息。它只为每个给出一个空行。我需要添加什么来配置输出吗?

void charges()
{
//Structures to hold data
struct Expenses
{
string name;
double cost;
};

int chargesChoice;
const int CHARGES_MENU_VIEW = 1, CHARGES_MENU_UPDATE = 2, CHARGES_MENU_QUIT = 3;
const int NUM_EXPENSES = 8; //number of expenses
Expenses danceExpenses[NUM_EXPENSES]; //array of structures
int index; //loop counter

cout << "\nWhat would you like to do?\n\n"
<< "1. View charges\n"
<< "2. Update charges\n"
<< "3. Return to main menu\n"
<< "Enter your choice: ";
cin >> chargesChoice;

while (chargesChoice < CHARGES_MENU_VIEW || chargesChoice > CHARGES_MENU_QUIT)
{
cout << "\nPlease enter a valid menu choice: ";
cin >> chargesChoice;
}

switch (chargesChoice)
{
case CHARGES_MENU_VIEW: //Display the expenses data
myFile.open("c:\\danceexpenses.txt", ios::in); //open file
if (!myFile)
{
cout << "Error opening file. Program aborting.\n";
return;
}
char output[100];
cout << "\nHere are the expected expenses for the dance:\n";
for (index = 0; index < NUM_EXPENSES; index++)
cout << danceExpenses[index].name << endl << endl;
myFile.close(); //close file
break;
case CHARGES_MENU_UPDATE:
//get expense data
myFile.open("c:\\danceexpenses.txt", ios::out); //open file
if (!myFile)
{
cout << "Error opening file. Program aborting.\n";
return;
}
for (index = 0; index < NUM_EXPENSES; index++)
{
cout << "Enter the name of the expense: ";
cin.ignore();
getline(cin, danceExpenses[index].name);
cout << "Enter the expected cost for this expense: ";
cin >> danceExpenses[index].cost;
}

//Write data to file
for (index = 0; index < NUM_EXPENSES; index++)
{
myFile << danceExpenses[index].name << endl;
myFile << danceExpenses[index].cost << endl;
}
myFile.close(); //close file
break;
case CHARGES_MENU_QUIT:
showMenu();
break;
}
charges();
}

最佳答案

如果您的第一个操作是输入 1,则代码应输入:

    case CHARGES_MENU_VIEW: //Display the expenses data
myFile.open("c:\\danceexpenses.txt", ios::in); //open file
if (!myFile)
{
cout << "Error opening file. Program aborting.\n";
return;
}
char output[100];
cout << "\nHere are the expected expenses for the dance:\n";
for (index = 0; index < NUM_EXPENSES; index++)
cout << danceExpenses[index].name << endl << endl;
myFile.close(); //close file
break;

这会打开舞蹈费用文件,但不会从中读取。然后它遍历尚未初始化的费用列表,并关闭输入文件。还有一个未使用的变量 output

打印前需要将数据读入内存。

int num = 0;
while (myFile >> danceexpenses[num].name >> danceexpenses[num].cost)
num++;

for (index = 0; index < num; index++)
cout << danceExpenses[index].name << endl << endl;

关于c++ - 将文本文件中的数据读入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com