【问题标题】:How to take multiple lines Input in char arrays without overwriting using getline()如何在不使用 getline() 覆盖的情况下在 char 数组中输入多行
【发布时间】:2020-12-29 13:02:02
【问题描述】:

我是 C++ 的初学者。我基本上是在尝试使用 getline() 从多行中获取用户的输入。但它每次都会覆盖输入。有什么方法可以在 char 数组中获取输入而不覆盖前一行,或者有什么方法可以在字符串数组中获取输入并将其转换为 char 数组?

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

int main() {
    int lines;
    char sentence[1000];
    cout << "Enter Number of lines to write: ";
    cin >> lines;

    for (int i = 0; i <= lines; i++) {
        cin.getline(sentence, 1000);
    }

    ofstream infile("myfile.txt");
    infile << sentence;
    infile.close();
 
    return 0;
}

【问题讨论】:

  • 您的目标是将用户输入写入文件,还是将所有输入(同时)存储在sentence中?

标签: c++


【解决方案1】:

你需要做两件事:

  1. 在开始要求用户输入之前打开目标文件。
  2. 在询问用户输入的循环中,每次输入后,将缓冲区内容转储(追加)到目标文件。

类似(伪代码,未经测试)

int main() {
  int lines;
  char sentence[1000];
  cout << "Enter Number of lines to write: ";
  cin >> lines;

  // prepare the destination file
  ofstream infile("myfile.txt");

  // now start taking inputs
  for (int i = 0; i <= lines; i++) {
      cin.getline(sentence, 1000);
      infile << sentence;          // copy / dump the user input to file
                                   // before you read the next input in same buffer
  }
  
  infile.close();

  return 0;
}

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。其中之一是先前的答案。但是在cin &gt;&gt; lines; 之后可能cin.getline(sentence, 1000); 可以跳过一次。有两种方法可以避免:

    1. std::cin.ignore();cin &gt;&gt; lines; 之后
    2. 要通过字符串从用户那里获取任何输入,然后转换为类似这样的一些信息:
    std::string s{};
    std::getline(std::cin, s);
    const auto lines = std::stoul(s);
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多