0

我正在寻找一些指导或帮助来解决我在 C++ 中遇到的这个特殊障碍。我来自 python 背景,所以有些事情让我感到困惑。我将一个文本文件作为命令行参数,并尝试将变量解析/分配给我在文本中读到的内容。我制作了一个超级简单的文本文件,我认为这是一个超级简单的 cpp 文件。我确实是根据与我在这里看到的问题类似的其他一些建议写的。

在 python 中,我可以为 .readlines() 函数实现快速的正则表达式排序并快速分配变量,而且我知道在 CPP 中它不会那么容易,所以这就是我所拥有的:

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    if (argv > 1) 
    {
        std::ifstream s(argv[1]);
        if (s.is_open())
            ; // compiler complained unless this was on its own line
        {
            int i, j, k; // assign ints, no idea why
            s >> i >> j >> k; // 
            std::cout << i << endl;
            std::cout << j << endl;
            std::cout << k << endl;

            // repeat the same with chars, try to assign from file reads?

        }
    }
}

我的文本文件只有:

5
3
1

我希望看到我的程序的输出是“5 \n 3 \n 1”

这没有发生。我希望最终做的是有一个目标行,如:“Truck 500”并寻找“Truck”,但将一个 int 卡车变量分配给“500”

如果我的问题到处都是,我很抱歉,但也欢迎任何帮助或对正确方向的引用。谢谢!

4

1 回答 1

3

首先,-statement 后面的分号是if-statement 的完整条件块if(它绝对可以放在前一行,但几乎可以肯定你不想一开始就有分号)。此外,您总是需要在阅读检查您的输入!流不知道您接下来要尝试什么,并且在实际尝试之前无法预测它是否会成功。也就是说,您的代码应如下所示:

std::ifstream in(argv[1]);
if (!in) {
    std::cout << "ERROR: failed to open '" << argv[1] << "' for reading\n";
}
else {
    int i, j, k;
    if (std::cin >> i >> j >> k) {
        std::cout << "read i=" << i << " j=" << j << " k=" << k << '\n';
    }
    else {
        std::cout << "ERROR: there was a format error\n";
    }
}

也就是说,根据您的代码,您应该看到预期的输出,假设您确实设法正确打开了文件。我猜上面的代码会指出出了什么问题。

于 2013-10-06T20:09:59.967 回答