我正在寻找一些指导或帮助我在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”
没有发生。我最终要做的是有一个目标线,如: “卡车500” 并查找“Truck”,但将int truck变量分配给“500”
如果我的问题到处都是,我很抱歉,但也欢迎任何有关正确方向的帮助或参考。谢谢!
答案 0 :(得分:3)
首先,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";
}
}
那就是说,基于你的代码,你应该看到预期的输出,假设你确实设法正确地打开了文件。我猜想上面的代码会指出出了什么问题。