我有一个用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并且它没有崩溃但变量是空的。
答案 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();
}