【问题标题】:Running lines from an external text file从外部文本文件运行行
【发布时间】:2017-10-10 14:50:48
【问题描述】:

我有一个程序使用cin.getline()获取用户输入行

我有一个 cin.getline(inputString, MAX_LENGTH) ,用户可以在其中输入有效命令的列表,例如

add -user "CoolGuy22" "John"

我解析 inputString 并添加用户等。 现在我正在尝试创建一种从外部文件运行一堆命令的方法。外部文本文件中的每一行都是用于测试用户输入命令的不同命令。比如

add -user "CoolGuy22" "John"
add -user "CoolGirl22" "Jenny"
add -delete "CoolGuy22" "John"

这是我运行的命令。它要求用户输入。

void Display::getInput(){
  SessionLog log;
  StringEval eval;
  cout << endl << endl << "Enter Command: ";
  char input[MAX_LENGTH];
  //string input;
  cin.getline(input, MAX_LENGTH);
  eval.parseString(input);

  getInput();

我会输入.read "script.text"

这应该读取 script.text 文件并从脚本中输入单个命令以自动执行测试。

if (inputString.substr(0, 5) == ".read"){
  cout << "Read from file: \"" << inputString.substr(6, inputString.length()-6) << "\"" << endl;
  ifstream inFile;
  inFile.open(inputString.substr(6, inputString.length()-6));
  if (!inFile) {
    cerr << "Unable to open file script.txt" << endl;
    //GOTTA READ THE LINES NOW
  }

我成功访问了 script.txt,但现在我卡住了。我不确定如何将 script.text 上的每一行都发送回程序。任何帮助将不胜感激

【问题讨论】:

  • 其实我不确定我是否完全误解了这个问题...cin.getline 是什么意思?
  • @tobi303 我编辑了主要帖子,希望这能清除我想要做的事情。谢谢!
  • 好的,更清楚一点。确实是我的误会。但是,代码中仍然没有cin.getline
  • @tobi303 inputString.substr(0, 5) 是主帖中提到的 cin.getline() 函数的一部分。程序读取文件的这段代码在 .read "script.text" 文件之后
  • getline 是标准库中的一个函数,您的代码行如何成为它的一部分?请提供minimal reproducible example

标签: c++ file-io ifstream


【解决方案1】:

如果您想逐行读取文件,只需这样做:

std::ifstream inFile(<path>);
if (!inFile.is_open()) {
    exit(1); // Handle error
}

std::string line;
while(std::getline(inFile, line)) {
    std::cout << line << std::endl;
}

【讨论】:

  • 这样做的问题是它只是简单地输出到控制台,而不是把它变成程序的输入。
  • @user1692517,你必须更具体。您所说的“程序输入”是什么意思?你想通过shell执行这些命令吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多