【问题标题】:C++ (Visual Studio): Recieving nothing when trying to read input from a .txt fileC++ (Visual Studio):尝试从 .txt 文件读取输入时没有收到任何信息
【发布时间】:2017-09-17 19:12:48
【问题描述】:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
string line = "test";
ifstream myfile("example.txt");
myfile.open("example.txt");

if (myfile.is_open())
{
    cout << line << "\n";
    cout << "File Opened\n";
    getline(myfile, line);
    cout << line;
    while (getline(myfile, line))
    {
        cout << line << '\n';
        cout << "test";
    }
    myfile.close();
}

else cout << "Unable to open file";

//return 0;
//getchar();
}

如果这个问题已经得到解答,请提前道歉,但是虽然我找到了几个非常接近我需要的答案,但我找不到这个特定问题的答案。

我是 Visual Studio 的新手,但过去曾涉足 C++。我正在尝试从文本文件中读取数据,并且(现在)只需使用 cout 将其打印出来。但是,我没有看到任何结果。

起初我认为我只是将我的 txt 文件放在了错误的位置 - 我确实做到了。最初我会收到“无法打开文件”行,表示无法打开文件。所以我移动了它,发现了 Visual Studio 想要我把文件放在哪里。

所以现在我成功地看到“文件打开\n”行打印到屏幕上,然后什么也没有。我认为我可能使用错误的 getline,但如果我将文件输入“myfile”替换为“cin”,getline 将愉快地整天读取键盘输入,所以也不是这样。

所以我加入了一些测试 cout 语句,打印出我的字符串 line 的值。第一个打印出应有的“测试”。然后我将 txt 文件的一行读入该字符串变量,当我再次 cout 时,我什么也没得到。这是一个空字符串。

此外,循环内的“cout

因此,据我所知,该程序能够找到我的文本文件 example.txt。但它实际上并没有看到里面的内容。

文本文件的内容(以及我希望程序打印出来的内容)如下:

"这是第一行

这是第二行

第三

第四

第五”

非常感谢任何和所有的帮助。

【问题讨论】:

    标签: c++ visual-studio


    【解决方案1】:

    想通了。

    出了问题的是这一行:

    ifstream myfile("example.txt");
    

    我不知道具体原因,但由于我在下一行指定了要打开的文件 (myfile.open("example.txt"); ),因此在 ifstream 声明中指定文件路径会导致问题。

    我不完全明白,因为其他人说代码对他们来说运行良好。但这似乎行得通。

    如果我有什么理由不应该使用这个解决方案,请告诉我。

    【讨论】:

    • 这很微妙,我什至从未注意到多余的open。它可能失败了,因为文件已经打开,但对象处于无效状态,因此 is_open 返回 true。
    【解决方案2】:

    你可能想看看你打开的文件 "myfile.open("example.txt");"我发现如果您不提供文件路径,就会发生奇怪的事情。 myfile.open("c:\test\example.txt"); 是我对代码所做的调整,它像梦一样工作。

    【讨论】:

    • 感谢您的想法,不幸的是,这似乎也不起作用。我设法让 C++ 找到该文件(在我忘记使用 \\ 而不是 \\ 的短暂错误之后),但即使使用完整的显式文件路径,我也得到了与以前相同的输出。编辑:我只是有一个想法 - 我是否正确使用 myfile.open ?我不确定我必须输入两次文件路径是否有意义。我要再研究一下,也许就是这样。
    • 这很奇怪。就像我说的,我对代码进行了调整,效果很好。
    • 我相信你。这段代码并不是特别原创,它基本上只是我在网上看到的每个教程关于如何读取文件输入的修改版本,所以我不确定我做错了什么。
    • 对重复的 cmets 感到抱歉,但我想通了。将在答案中解释。
    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多