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

在用c+解析文件后分配变量+; 我正在寻找一个指导或帮助我在C++中使用的这个特殊的障碍。我来自python背景,所以有些事情让我感到困惑。我将一个文本文件作为命令行参数,并尝试将变量解析/分配给我在文本中读取的内容。我制作了一个超级简单的文本文件,我认为是一个超级简单的cpp文件。我确实是根据其他一些建议写的,类似于我在这里看到的答案,c++,parsing,args,C++,Parsing,Args,在python中,我可以为.readlines()函数实现一个快速正则表达式排序,并快速分配变量,我知道在CPP中这不会那么容易,所以我得到了以下结果: #include <fstream> #include <iostream> using namespace std; int main(int argc, char *argv[]) { if (argv > 1) { std::ifstream s(argv[1]);

在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\n 3\n 1”

但事实并非如此。我希望最终能有一个目标线,比如: “卡车500” 并查找“Truck”,但将int Truck变量指定给“500”


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

首先,
if
-语句后面的分号是
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";
    }
}
std::ifstream-in(argv[1]);
如果(!in){
标准::cout>j>>k){

std::cout首先,
if
-语句后面的分号是
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";
    }
}
std::ifstream-in(argv[1]);
如果(!in){
标准::cout>j>>k){

std::cout首先,
if
-语句后面的分号是
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";
    }
}
std::ifstream-in(argv[1]);
如果(!in){
标准::cout>j>>k){

std::cout首先,
if
-语句后面的分号是
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";
    }
}
std::ifstream-in(argv[1]);
如果(!in){
标准::cout>j>>k){

如果这是你的真实代码,(a)分号根本不属于
If(s.is_open())
子句之后(不管是同一行还是下面的行)。(b)如果文件没有打开,你永远不会在不存在的else情况下提供输出。(c)你永远不会通过
if(s>>i>>j>>k){…}或者{report failure}
“…验证流提取。发生了什么事?有什么事吗?如果这是你的真实代码,(a)分号根本不属于
if(s.is_open())
子句之后(无论是同一行还是下面的行)。(b)如果文件没有打开,您就不会在不存在的else情况下提供输出。(c)您永远不会通过
if(s>>i>>j>>k){…}或者{report failure}
“…这没有发生。”发生了什么?任何事情?如果这是您的真实代码,(a)分号不属于
if(s.is_open())之后
子句(不管是同一行还是下面的行)。(b)如果文件没有打开,您永远不会在不存在的else情况下提供输出。(c)如果(s>>i>>j>>k){…}else{report failure}
>“…哪一个没有发生。”发生了什么?如果这是您的真实代码,(a)分号根本不属于
if(s.is_open())
子句之后(无论是同一行还是下一行)。(b)如果文件没有打开,您永远不会在不存在的else情况下提供输出。(c)您永远不会通过
if(s>>i>>j>>k){…}else{报告失败}验证流提取
谢谢你的解释。你肯定让我走上了正确的轨道,很明显我现在做错了什么。我这里有足够的东西可以处理,所以谢谢你!谢谢你的解释。你肯定让我走上了正确的轨道,很明显我现在做错了什么。我这里有足够的东西可以处理,所以谢谢你!谢谢你的解释。你肯定让我走上了正确的轨道,很明显我现在做错了什么。我这里有足够的东西我可以一起工作,所以谢谢你!谢谢你的解释。你肯定让我走上了正确的轨道,很明显我现在做错了什么。我这里有足够的东西我可以一起工作谢谢你!