gpt4 book ai didi

c++ - 在我的 switch 语句完全执行之前,我的 while 循环进入第二次迭代,我正在用 c++ 编码

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

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

void ReadFile()
{

string fileName;
ifstream inFile;

cout << "Please enter the password for the external file: ";
getline(cin, fileName);

inFile.open(fileName);

}//End of ReadFile() function


int main()
{
vector<string> studentName, studentNumber, studentClass;
char option;

while (option != 'g' && option != 'G')
{

cout << "\t\t\t" << "Student List Menu\n\n";
cout << "A. Reading the Student List from a file\n";
cout << "B. Adding Student's Informations into the Student List\n";
cout << "C. Displaying the content of the Student List\n";
cout << "D. Sorting and Displaying the content of the Student List\n";
cout << "E. Writing the Student List to a file\n";
cout << "F. Searching for a Student's Information from the Student List\n";
cout << "G. Ending the program\n\n";
cout << "Please enter an option: ";
cin >> option;
cout << endl;

switch (option)
{

case 'A':
case 'a':
ReadFile();
break;

case 'B':
case 'b':
break;

case 'C':
case 'c':
break;

case 'D':
case 'd':
break;

case 'E':
case 'e':
break;

case 'F':
case 'f':
break;

case 'G':
case 'g':
cout << "Thank you for using the program!";
break;

default: cout << "Invalid option choice\n\n";

}

}

return 0;
}//End of main function

当我选择选项“A”时,switch 语句调用 ReadFile() 函数,但是当它要求输入“密码”(文件名)时,会读取“学生列表菜单”,我认为表示 do-while 循环在执行 ReadFile 函数的同时继续运行,因此它读取输入直到换行符。我该怎么做才能让它先运行选项,然后继续执行 do-while 循环?

最佳答案

当你输入时

a

在您的终端中按下Enter,在输入流中输入了两个字符:a'\n'

当你使用

cin >> option;

在这样的输入流上,首先读取'a'。换行符仍在输入流中。

然后调用 ReadFile(),后者调用 getline(cin, fileName)。该调用得到一个空字符串,因为换行符仍然存在于输入流中——它不会等待您输入文件名。在那之后,输入流中就没有任何东西了。此外,ReadFile() 返回。这就是您看到学生菜单的原因。

问题的解决方法是在读取 option 后忽略该行的其余部分。

cin >> option;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

关于c++ - 在我的 switch 语句完全执行之前,我的 while 循环进入第二次迭代,我正在用 c++ 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29338585/

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