我对C++还是个新手,我的任务相当艰巨。 我必须创建一个菜单(我在这个菜单中挣扎得相当厉害),不仅如此,我还应该读取并显示一个文本文件。 到目前为止,我使用的唯一方法只显示文本文件的第一行。 你能帮帮我吗? 提前谢谢你。
break函数,当添加到第一种情况时,也使循环成为一堵无限的文本墙! 我不知道该怎么办。
// Assignment 1.cpp : Tally Ho Generator
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int runMenu;
int main()
{
int menuInput;
bool menu = true;
ifstream inFile;
string ABOUT;
// Menu Interface
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
cout << " The Tally Ho Probability Generator (MCD4720_Assignment 1)\n";
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
cout << " [1] End Testing the Program\n";
cout << " [2] Display About Information\n";
cout << " [3] Read and store data from files\n";
cout << " [4] Generate a Dice Tally Table\n";
cout << " [5] Save Tally Statistics to a file\n";
cout << " [6] Load Tally Statistics from a file\n";
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
cout << "Which Option would you like (1-6)\n";
cin >> runMenu;
// Menu Input Function
while (menu != false) {
switch (runMenu)
{
case 1:
{
inFile.open("C:\\Users\\William\\Documents\\MCD Assignment 4720 1\\TallyAbout.txt");
while (getline(inFile, ABOUT)) {
cout << ABOUT << endl;
inFile.close();
}
break;
}
case 2:
{}
case 3:
{}
case 4:
{}
case 5:
{}
case 6:
{}
default: {
cout << " Input unrecognized, please choose again \n";
cin >> runMenu;
break;
}
}
}
cin.ignore();
cin.get();
return 1;
}
到目前为止,我使用的唯一方法只显示文本文件的第一行
这是因为您在读取第一行后关闭了文件:
while (getline(inFile, ABOUT)) {
cout << ABOUT << endl;
inFile.close(); // <------ here !!
}
您不需要显式关闭文件。 该文件在infile
的析构函数中关闭。
break函数,当添加到第一种情况时,也使循环成为一堵无限的文本墙! 我不知道该怎么办。
这是因为break
从交换机中中断。 其他案件不予处理。 特别是,您要求用户输入的default
情况将不会执行。 实际上,您从不修改menu
的值,而(menu!=false)
是一个无限循环。 将任何情况下必须执行的部件移出交换机:
while (menu != false) {
switch (runMenu)
{
case 1:
{
inFile.open("C:\\Users\\William\\Documents\\MCD Assignment 4720 1\\TallyAbout.txt");
while (getline(inFile, ABOUT)) {
cout << ABOUT << endl;
inFile.close();
}
break;
}
//...
default: {
cout << " Input unrecognized, please choose again \n";
break;
}
}
cin >> runMenu;
// put logic here, for example:
menu = (runMenu == 1);
}
您应该相应地修改输出。 目前它说“输入无法识别,请再次选择”,但如果我理解正确,用户必须选择继续或不在每次迭代。 另外,对menu
和runmenu
使用一个而不是两个变量将更不容易出错。
请尝试以下操作:
case 1:
{
inFile.open("C:\\Users\\William\\Documents\\MCD Assignment 4720 1\\TallyAbout.txt");
while (getline(inFile, ABOUT)) {
cout << ABOUT << endl;
}
inFile.close();
break;
}
在读取第一行后关闭文件,现在的区别是在读取所有行后关闭文件