【问题标题】:How to read a file with spaces in C++?如何在 C++ 中读取带有空格的文件?
【发布时间】:2020-03-15 02:07:50
【问题描述】:

上周我开始在大学学习 C++ 课程。目前我只知道一些 C 语言,这让我在学习 C++ 时有点困惑。我有这个练习说: "编写并使用 fstream 库读取文本文件。该函数应在屏幕上写入文件读取的每个文本行(带空格)。"

我在下面写了可以写行但没有空格的代码。我也听说过getline,但是我不知道怎么用,编译器总是说“调用getline没有匹配的函数”。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

file_read(){
    ifstream origem;
    origem.open("ficheiro.txt");


    if (!origem) {
        cerr << "Error" << endl;
        return -1;
    }
char outp[100];

while(!origem.eof() ){
    origem >> outp;
    cout << outp;
    }

return 0;
}

例如:如果我在ficcheiro.txt“我的狗有一根骨头”,程序会写成“Mydoghasabone”

所以我用 getline 尝试了这个:

...
    ifstream origem;
    origem.open("ficheiro.txt");


    if (!origem) {
        cerr << "Error" << endl;
        return -1;
}
    char outp[100];

    getline(origem, outp);
    origem >> outp;
    cout << outp;

    return 0;
}

编译器说:[Error] no matching function for call to 'getline(std::ifstream&, std::char [100])'

我的问题只是读取包含空格的文件!


我在学习 C++ 时也遇到了一些麻烦,我开始学习“类”并使用 CMD,但我什至不知道自己在学习什么。你知道我在哪里可以更容易理解地学习 C++ 吗?

【问题讨论】:

  • 当你尝试std::getline时发生了什么?
  • 编译器说“调用 getline 没有匹配的函数”,我无法运行程序
  • std::getline 是正确的方法。如果您无法编译它,那么除非您edit 问题并显示minimal reproducible example 任何人都可以剪切/粘贴如图所示逐字复制 并重现您的编译错误,不太可能有人可以帮助您找出原因。可能有很多。
  • 我应该写std::,我已经在使用"using namespace std;" ...我会做那个最小的可重复示例...谢谢你试图帮助我,顺便说一句。
  • 如果you forget that using namespace std; exists 至少你完全理解它的真正作用,你会帮自己一个忙。

标签: c++ fstream ifstream ofstream


【解决方案1】:

试试这个

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int file_read()
{
    ifstream origem;
    origem.open("ficheiro.txt");


    if (!origem) {
        cerr << "Error" << endl;
        return -1; 
    }
    char outp[100];

   while( origem.getline(outp,100) )
        cout << outp;

return 0;
}

int main()
{
    file_read();
}

编译器说:[Error] no matching function for call to 'getline(std::ifstream&, std::char [100])'

如果你想使用 getline() 将输出从字符更改为字符串

string outp;

while( getline(origem,outp))
    cout << outp;

因为 getline() 是针对string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2020-03-18
    • 2011-04-30
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多