[英]Assistance with file input and output in C++
首先,感谢您的帮助,希望我能正确地遵循您的指南,如果没有,我将非常乐意纠正它。
我需要一些帮助来完成我的作业。 最终使它运行之后,我的程序将无法打开我需要的文件。 该程序应打开一个名为prog10in.txt
的文件,并将prog10in.txt
输出到一个名为prog10out.txt
的文件中。但是,我在其中放置了一行,告诉我它是否失败并且不断出现。 我正在Visual Studio中执行此操作。 无论我的错误是在代码中还是在Visual Studio中,我都需要了解如何正确打开文件。 程序编译没有错误。
错误应该在getAccountInfo()
或outputFile()
。
Source.cpp
:
#include <iostream>
#include <string>
#include "Account.h"
#include "Bank.h"
#include <cstdio>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream inStream;
int main(int argc, char* argv[])
{
Account accounts[MAXIMUM_ACCOUNTS];
Bank Customer;
int AccountNumber = 0;
int ID;
string lastName;
string firstName;
double balance;
Customer.getAccountInfo(argv, AccountNumber, ID, lastName, firstName,balance, accounts);
Customer.sort(AccountNumber, accounts);
Customer.outputFile(argv, AccountNumber, accounts);
}
有一个Account.h
和Account.cpp
文件,其中包含帐户信息类。
Bank.cpp
:
#include <iostream>
#include <string>
#include "Account.h"
#include "Bank.h"
#include <cstdio>
#include <fstream>
#include <iomanip>
void Bank::getAccountInfo(char* argv[], int& accountNumber, int& accountID, std::string& accountLastName, std::string& accountFirstName, double& accountBalance, Account Customers[MAXIMUM_ACCOUNTS])
{
std::ifstream fin;
int accountIndex = 0;
fin.open(argv[1]);
if (fin.fail())
{
std::cout << "Input file did not open" << std::endl;
system("pause");
exit(1);
}
while (!fin.eof() && accountIndex < MAXIMUM_ACCOUNTS)
{
std::cout.setf(std::ios::fixed | std::ios::showpoint | std::ios::right);
std::cout.precision(2);
fin >> accountID >> accountLastName >> accountFirstName >> accountBalance;
fin.ignore(1, ' ');
Customers[accountIndex]._accountID = accountID;
Customers[accountIndex]._accountLastName = accountLastName;
Customers[accountIndex]._accountFirstName = accountFirstName;
Customers[accountIndex]._accountBalance = accountBalance;
accountIndex++;
accountNumber++;
}
std::cout << "Clients: " << accountIndex << std::endl;
}
void Bank::sort(int accountNumber, Account Customers[MAXIMUM_ACCOUNTS])
{
int nextSmallest;
int IDtemp;
std::string lastNameTemp;
std::string firstNameTemp;
double balanceTemp;
for (int accountIndex = 0; accountIndex < accountNumber; accountIndex++)
{
nextSmallest = accountIndex;
for (int accountIndex2 = accountIndex + 1; accountIndex2 < accountNumber; accountIndex2++)
{
if (Customers[accountIndex2]._accountID < Customers[nextSmallest]._accountID)
{
nextSmallest = accountIndex2;
}
IDtemp = Customers[accountIndex]._accountID;
Customers[accountIndex]._accountID = Customers[nextSmallest]._accountID;
Customers[nextSmallest]._accountID = IDtemp;
lastNameTemp = Customers[accountIndex]._accountLastName;
Customers[accountIndex]._accountLastName = Customers[nextSmallest]._accountLastName;
Customers[nextSmallest]._accountLastName = lastNameTemp;
firstNameTemp = Customers[accountIndex]._accountFirstName;
Customers[accountIndex]._accountFirstName = Customers[nextSmallest]._accountFirstName;
Customers[nextSmallest]._accountFirstName = firstNameTemp;
balanceTemp = Customers[accountIndex]._accountBalance;
Customers[accountIndex]._accountBalance = Customers[nextSmallest]._accountBalance;
Customers[nextSmallest]._accountBalance = balanceTemp;
}
}
}
void Bank::outputFile(char* argv[], int accountNumber, Account Customers[MAXIMUM_ACCOUNTS])
{
int outFileIndex;
std::ofstream fout;
fout.open(argv[2]);
if (fout.fail())
{
std::cout << "Output file did not open" << std::endl;
system("pause");
exit(1);
}
if (fout.fail())
{
std::cout << "Output failed" << std::endl;
exit(0);
}
fout.setf(std::ios::fixed | std::ios::showpoint | std::ios::right);
fout.precision(2);
for (outFileIndex = 0; outFileIndex < accountNumber; outFileIndex++)
{
fout << std::setw(6) << Customers[outFileIndex]._accountID;
fout << std::setw(10) << Customers[outFileIndex]._accountLastName;
fout << std::setw(10) << Customers[outFileIndex]._accountFirstName;
fout << std::setw(10) << Customers[outFileIndex]._accountBalance;
fout << std::setw(10) << std::endl;
}
}
再次感谢你们的帮助。
我认为您的程序找不到输入文件。 对? 因为如果不存在,将创建输出文件。
关于输入,因此,如果使用绝对路径,则除非路径错误,否则它应该可以工作。 但是如果您使用的是相对路径。 您应该知道从Visual Studio运行程序时,当前目录(。)将是projects目录。
您的路径不正确。 如果filename是"abc.txt"
,并且文件与二进制文件(exe文件)位于同一文件夹中,则只需要提供名称即可。 如果不是,则用双引号提供文件的完整路径(如果存在空格)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.