-1

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

0
0.8
C:\Documents\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 并且它没有崩溃但变量为空。

4

2 回答 2

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/

于 2013-08-23T16:14:01.590 回答
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();
}
于 2013-08-23T16:14:29.137 回答