我创建了一个名为program.txt的数据文件。我需要创建代码,打印出来自该program.txt的行数和整数值 这是我制作的文字
int main(int argc, const char * argv[]) {
struct data *input;
readfile(&j, input);
printf("%f\n",input[0].percent_change);
}
program.text中包含这些值
1
35
45
87
9
100
在cerr之后我尝试退出(1)并且说没有定义退出。 我是新手,任何帮助将不胜感激。谢谢这是C ++ btw。
答案 0 :(得分:0)
问题是您使用的是ifstream
,它代表INPUT文件流。您想使用ofstream
,即OUTPUT文件流。您无法写入输入文件流,因此<<运算符未定义。
此外,您可以在exit(1)
函数内return 1;
,而不是在错误后使用main
。这将终止程序,返回1作为退出代码。
如果您真的想使用退出,则需要#include <cstdlib>
。
答案 1 :(得分:0)
您定义的输入和预期输出没有明确定义,所以我不确定您要做什么。但是,这是一个大致的想法:
将文件名放在fstream的构造函数中会自动尝试打开文件进行读/写。你不需要再打电话给.open()了。另外,如果你不知道自己在做什么,你不应该同时读写同一个文件。
std::ifstream myInputFile("program.txt");
std::ofstream myOutputFile("programOut.txt");
不要检查myInputFile.fail()
,只需使用重载的布尔运算符。深入解释:ifstream::is_open vs ifstream::fail?
if (!myInputFile) {
//Something went wrong
std::cerr << "Failed to open input file" << std::endl;
return 1;
}
定义你的std :: string以在读取行时保存行,读取所有输入文件并计算行数。
std::string line;
int lineCount = 0;
while (getline(myInputFile,line)) {
++lineCount;
//Do something with 'line'
}
也许您需要存储输入文件中的行,以便输出输出文件开头的行数,您可能需要#include <vector>
并执行以下操作:< / p>
std::string line;
std::vector<std::string> linesFromFile;
//Read in all lines of the input file and store them in the vector
while (getline(myInputFile, line)) {
linesFromFile.emplace_back(line);
}
//All lines read, good time to close input file
myInputFile.close();
//Print number of lines read
myOutputFile << linesFromFile.size() << std::endl;
//Loop through lines and print them
for (auto &lineFromFile : linesFromFile) {
myOutputFile << lineFromFile << std::endl;
}
//Done outputting, close output file
myOutputFile.close();