繁体   English   中英

从文件中读取行:无法使用 getline()

[英]Read line from file: Unable to use getline()

我的任务是编写一个 function 从文本文件中读取一行(重命名为.dat ,但它只包含文本),但由于以下几点,我无法选择解决方案:

  1. 我正在使用Borland C++ Version 5.02 ,不,我不能下载另一个编译器,因为我的笔记本电脑没有管理员权限,而且知道所需密码的人要到下周才会出现。

  2. 编译器不接受using namespace std ,也不接受getline() ,无论是否包含stringiostream

我正在尝试找到解决方案或至少是最小的方法,但我找不到。

所以我的问题是:如何在不使用getline()的情况下从简单的文本文件中读取一行( cin.getline有效,而来自stringfstream的无效)? 文本文件包含如下几行:

1234;12.05.03;08:44:23; XY12-AB;A1-12;超时

2345;12.05.03;09:04:34;XY1-CD;A22-9;连接被拒绝

;之间的数字/字母需要存储在变量中,以便可以使用它们。

我不是要你写我的代码,但我真的很沮丧,我的导师也帮不上忙。

长寿和繁荣,我。

http://www.cplusplus.com/reference/string/string/getline/

如果您不能使用(您不应该使用)

using namespace std

然后使用::运算符引用您的命名空间
例如:

std::string

现在尝试使用std ::编写自己的代码,如果仍然无法注释,请添加注释。

另外,除了std :: getline()以外,还有很多其他选项可以读取文本行。

参考: 逐行读取文件

选项1:

尝试使用C的fgets()函数。

选项2:您提到cin.getline()有效。 您可以使用输入文件freopen stdin,然后cin指向所提到的文件。 之后,cin.getline()将从文件中读取:

缺点:在freopen之后,您将无法接受用户的任何输入。

示例:请注意,尚未使用g ++尝试过此方法,但我想它也应与Borland一起使用。

#include <iostream>
#include <stdio.h>

int main() {
        char buf[1000];
        freopen("somefile.dat", "r", stdin);
        while (cin.getline(buf, sizeof(buf)).good()) {
                // Now buf contains a line
                // Do something with it
        }
        return 0;
}

尝试使用

getline(cin >> ws, variableName);

但首先,你必须使用

using namespace std;

我在将结构上的多维数组用于文件时遇到了同样的问题,我尝试了不同的方法。 但后来我尝试了这个,它对我有用。

所以在我的情况下它会是这样的

#include <iostream>
#include <fstream>

using namespace std;

int main () {

ifstream myFile;
myFile.open("test.txt");
int count = 0;
while (!myFile.eof())
{
    getline(myFile >> ws, data[count].string1);
    getline(myFile >> ws, data[count].string2);
    myFile >> data[count].int1;
    for (int i = 0; i < data[count].int1; i++) {
        getline(myFile >> ws, data[count].data2[i].string3);
    }
    count++;
}

return 0;

}

更多信息: https://www.geeksforgeeks.org/problem-with-getline-after-cin/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM