从文件中读取不同类型的变量(每行1个)

时间:2013-08-23 16:02:29

标签: c++ file input parameters

我有一个用C ++编写的应用程序,它从extern txt文件中获取一些参数。这个文件每行有一个变量,它们有不同的类型,如:

  

0
  0.8
  C:\文档\ TextFile.txt的
  9

我试过这样的事情(不完全是我现在没有代码)

    FILE* f;
char line[300];
f = fopen("parameters.txt", "r");

    scanf(line, val1);
    scanf(line, val2);
    scanf(line, val3);
    fclose(f);

但它不起作用,也尝试了fgets和fgetc的一些变化,但没有奏效。任何帮助或想法?变量总是相同的数字,并且在每个地方都有相同的类型(所以我认为我不需要任何while或循环)。非常感谢你对这个让我疯狂的新手问题的帮助。

修改 实际上这是我在另一个解决方案中看到的确切代码

sscanf(line, "%99[^\n]", tp);
sscanf(line, "%99[^\n]", mcl);
sscanf(line, "%99[^\n]", pmt);
sscanf(line, "%99[^\n]", amx);

它不起作用,它编译但是程序崩溃所以我把它改成了scanf并且它没有崩溃但变量是空的。

2 个答案:

答案 0 :(得分:0)

由于您使用的是C ++(不仅仅是C),我建议您使用标准的iostreams库而不是C stdio。特别是,std :: ifstream擅长从文件中读取格式化数据。

#include <fstream>
#include <string>

// ...

std::ifstream f("parameters.txt");

int val1;
f >> val1;

double val2;
f >> val2;

std::string val3;
std::getline(f, val3);

// etc

根据您的应用程序,您可能还需要进行错误检查。有关iostream的详细信息,请参阅http://www.cplusplus.com/reference/iolibrary/

答案 1 :(得分:0)

scanf用于读取stdin的输入,与FILE无关。

如果您想逐行阅读文本文件,我不建议使用FILE。它更复杂,更适合二进制阅读。我会选择ifstream,这是一个非常简单的例子:

#include <iostream>
#include <fstream>

using namespace std;

int main(void) {
    ifstream stream("parameters.txt");
    string line;

    /* While there is still a line. */
    while(getline(stream, line)) {
        // variable 'line' is now filled with everyone on the current line,
        // do with it whatever you want.
    }

    stream.close();
}