gpt4 book ai didi

C++ 不正确的循环算法(或文件处理问题)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:37 24 4
gpt4 key购买 nike

我正在尝试编写一个程序来读取文本文件、进行一些计算、显示答案,然后写入文本文件。该程序目前只写了一行文本,而不是我想要的 5 行。

输入的文本文件格式如下:

    string double double
string double double
string double double
string double double
string double double

输出的文本文件变成这样:字符串, double , double , double ,

它写下我想要的,但只写一次。我希望它处理所有 5 行。我的程序只处理输入文本文件的最后一行。

这是输入文本文件的样子(只是没有文件名)

    //payinfile.txt
2198514 17.20 11.25
6698252 59.25 21.00
5896541 50.00 10.00
8863214 45.00 18.20
8465555 25.75 14.80

这是我的程序代码

    // outputprogram.cpp
#include <iostream>
#include <fstream> // file stream
#include <iomanip>
#include <string>
#include <cstdlib> // exit function prototype
using namespace std;

void outputLine(const string, double, double); // prototype
// void writeToFile();

int main()
{
// ifstream constructor opens the file
ifstream inputFile("payinfile.txt", ios::in);

// exit program if ifstream could not open file
if (!inputFile)
{
cerr << "File could not be opened" << endl;
exit(EXIT_FAILURE);
} // end if

string ID; // the account number
double hours; // the account owner's name
double rate; // the account balance

cout << left << setw(10) << "ID" << setw(15)
<< "Hours" << setw(10) << "Rate" << right << setw(10) << "Gross" << endl << fixed << showpoint;

// display each record in file
while (inputFile >> ID >> hours >> rate)
{
outputLine(ID, hours, rate);
}

} // end main

// display single record from file
void outputLine(const string ID, double hours, double rate)
{
double gross;
gross = 0.0;
gross = (hours * rate);

cout << left << setw(10) << ID
<< setw(15) << hours
<< setw(15) << setprecision(2) << rate
<< setw(10) << setprecision(2) << gross << endl;

// ofstream constructor opens file
ofstream writeToFile("FinalOutput.txt", ios::out);

// exit program if unable to create file
if (!writeToFile) // overloaded ! operator
{
cerr << "File could not be opened" << endl;
exit(EXIT_FAILURE);
} // end if

writeToFile << ID << ", " << hours << ", " << rate << ", " << gross << ", ";


} // end function outputLine

执行后输出文件如下所示:

    //FinalOutput.txt
8465555, 25.75, 14.8, 381.1,

所以它写了我想要的,我还希望它也将其他 4 行写到 FinalOutput.txt

最佳答案

在这一行中:

 ofstream writeToFile("FinalOutput.txt", ios::out);

每次要写一行时,您都在打开输出文件。这将截断文件(即删除内容)。

您可以每次都以追加模式打开文件,或者更好的是,在函数外部打开文件一次,然后通过引用将流对象传递给 outputLine 函数。

关于C++ 不正确的循环算法(或文件处理问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com