C++用getline()读取给定数目的行数或读取未知行数

C++的输入输出对于初学者来说是一件大难题!!!

做题的时候经常会遇到多行输入,有两种情况,(1)题目中给出输入是几行(2)输入行数未知。下面单独列举:
一、行数已知,读取多行数据。
*(1)*题目中给出输入n行,这个是最简单的。假如题目固定要求输入n行。
程序直接就是循环读入就好了,我这里贴的代码是每行有多个由空格分隔的字符串(string),分别处理每行中所有字符串。

for(int i=0;i<n;i++){
        string input;
        getline(cin, input);
        stringstream stringin(input);
        string str;
        vector<string> temp;
        while (stringin >> str) {
            temp.push_back(str);
        }
    }

*(2)*题目中没有固定输入几行,让用户自己定义,到底是3行还是5行。所以在输入的时候首先用户先要输入行数n(cin>>n),然后再读入后面的这些行。这里如果cin输入完行数以后,打换行符,然后开始输入下一行数据,由于getline会把这个换行符识别出来,所以cin后面直接用getline读数据会导致读入的第一行是空(也就是3后面的那个换行符被当做第一行读进来了):这里用户输入自定义行数3以后,换行输入后面的三行数据。这时如果cin后面直接用getline读下面三行的数据会造成读入的第一行为空
这里用户输入自定义行数3以后,换行输入后面的三行数据。这时如果cin后面直接用getline读下面三行的数据会造成读入的第一行为空。
所以,正确的程序应该是:

 int n;
    cin >> n;
    cin.ignore();
    for(int i=0;i<n;i++){
        string input;
        getline(cin, input);
        stringstream stringin(input);
        string str;
        vector<string> temp;
        while (stringin >> str) {
            temp.push_back(str);
        }
    }

在用getline读行数据之前,先使用cin.ignore()忽略换行符、空格。就可以正确读入后面的那些行了。

二、行数未知
还有一种情况是多组输入,不知道输入几组,题目没给也不许用户自定义,就是我输入进来几行你程序要自动识别,并按行处理。

string input;
while(getline(cin, input)){
    stringstream stringin(input);
    string str;
    vector<string> temp;
    while (stringin >> str) {
        temp.push_back(str);
    } 
}

用这个代码表示只要输入不结束,我就一直按行读取。但是这个需要用户在输入结束的时候另起一行输入“ctrl+z",getline可以识别这个符号作为输入的结束符。
如图,两行输入,怎么表示我输入完了?换行在键盘上敲"ctrl+z"会出现图中的"^Z"
如图,两行输入,怎么表示我输入完了?换行在键盘上敲"ctrl+z"会出现图中的"^Z"

OK啦!!!后面有其他的输入需求我会补充的~

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,操作文本文件(如.txt、.csv等)通常涉及文件输入流(ifstream)和文件输出流(ofstream)。这些操作包括读取文件内容和向文件写入数据。 **向文本文件写入(输出)**: ```cpp #include <fstream> #include <string> void writeToFile(const std::string& filename, const std::string& content) { std::ofstream outfile(filename); if (outfile.is_open()) { outfile << content; // 写入字符串 outfile.close(); // 关闭文件 std::cout << "Data written to file successfully.\n"; } else { std::cerr << "Failed to open the file.\n"; } } ``` 在这个例子中,`writeToFile` 函数尝试打开指定的文件名,如果成功,就将给定的内容写入文件,然后关闭文件。 **从文本文件读取(输入)**: ```cpp #include <fstream> #include <string> std::string readFromFile(const std::string& filename) { std::ifstream infile(filename); std::string content; if (infile.is_open()) { std::getline(infile, content); // 一次读取 infile.close(); return content; } else { std::cerr << "Failed to open the file.\n"; return ""; } } int main() { std::string data = readFromFile("example.txt"); if (!data.empty()) { std::cout << "File content: " << data << "\n"; } return 0; } ``` 在这个例子中,`readFromFile` 函数尝试打开文件并读取第一内容到字符串中,然后关闭文件。 **相关问题--:** 1. 如何处理大文件的读写操作? 2. 在C++中如何追加数据到已存在的文本文件? 3. 文件操作完成后,是否应该删除临时文件?为什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值