繁体   English   中英

使用C ++协助文件输入和输出

[英]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.hAccount.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM