Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文件中读取数据并将其存储到结构和计算公式中? 我是C++新手。我有一个名为test.txt的文件,其中包含以下数据_C++ - Fatal编程技术网

如何从文件中读取数据并将其存储到结构和计算公式中? 我是C++新手。我有一个名为test.txt的文件,其中包含以下数据

如何从文件中读取数据并将其存储到结构和计算公式中? 我是C++新手。我有一个名为test.txt的文件,其中包含以下数据,c++,C++,2 萨尔曼汗 20 100000 4.75 1000 阿米尔·汗 30 200000 5.25 1000 哪里 第一行是用户记录的数量, 第二行是用空格分隔的名称,和 第三行包括用户合格的年数、金额、费率、每月金额 我想计算公式并显示在表格中 到目前为止,我所做的工作如下: #include <iostream> #include <iomanip> #include <fstream> using namespace std; struct Custom

2
萨尔曼汗
20 100000 4.75 1000
阿米尔·汗
30 200000 5.25 1000
哪里 第一行是用户记录的数量, 第二行是用空格分隔的名称,和 第三行包括用户合格的年数、金额、费率、每月金额

我想计算公式并显示在表格中

到目前为止,我所做的工作如下:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

struct Customers
{
    char first_name[50];
    char last_name[30];
    int years; 
    float amount; 
    float interest_rate;
    float amount_per_month;
}; 

int main() {
    Customers cus;

    int sum = 0;
    string x,line;
    string fileName = "";
    ifstream inFile;

    string firstLine;
    int numberOfCustomers = 0;

    cout << "Enter File Name: \n";
    cin >> fileName;
    cout << "Reading File : '"+ fileName+"'" << endl;

    inFile.open(fileName);
    if (!inFile) {
        cout << "Unable to open file";
        exit(1); // terminate with error
    }

    if (inFile.good())
      {
        getline(inFile, firstLine);
        numberOfCustomers = stoi(firstLine);
        cout << "Available Loan Applications : " << numberOfCustomers << endl;
      }

     while (inFile >> x) {
       cout << x << endl;
       cin >> cus.first_name;
    }

    inFile.close();
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
结构客户
{
char first_name[50];
char last_name[30];
整数年;
浮动金额;
浮动利率;
每月浮动金额;
}; 
int main(){
顾客;
整数和=0;
字符串x,行;
字符串fileName=“”;
河流充填;
字符串第一行;
int numberOfCustomers=0;
cout>文件名;

cout您可以使用流提取和流插入运算符来读取/写入自定义数据类型:

#include <cstddef>   // std::size_t
#include <cstdlib>   // EXIT_FAILURE
#include <iterator>  // std::istream_iterator<>
#include <vector>    // std::vector<>
#include <string>    // std::string
#include <fstream>   // std::ifstream
#include <iostream>  // std::cout, std::cerr, std::ostream, std::istream

using namespace std;

struct Customer {
    string first_name, last_name;
    int years;
    float amount, interest_rate, amount_per_month;
};

// define a stream extraction operator that takes a Customer on the right hand side
// usage examples: std::cin >> customer;
//                 file >> customer;
istream& operator>>(istream &is, Customer &customer)
{
    // don't write directly into the members of Customer to not leave
    // the object in a flunky state if extraction fails for some value.
    string first_name, last_name;
    int years;
    float amount, interest_rate, amount_per_month;

    if (!(is >> first_name >> last_name >> years >> amount >> interest_rate >> amount_per_month))
        return is;  // if extraction of a value fails end here

    // if we reach here all values have been read successfully and can be
    // assigned to the customer:
    customer = { first_name, last_name, years, amount, interest_rate, amount_per_month };
    return is;
}

// define a stream insertion operator that takes a Customer on the right hand side
// usage examples: std::cout << customer;
//                 file << customer;
ostream& operator<<(ostream &os, Customer const &customer)
{
    os << customer.first_name << ' ' << customer.last_name << '\n' << customer.years << ' ' 
       << customer.amount << ' ' << customer.interest_rate << ' ' << customer.amount_per_month;

    return os;
}

int main()
{
    cout << "Enter filename: ";
    string fileName;
    cin >> fileName;

    ifstream inFile{ fileName };  // define variables as close to where they're
                                  // used. Use the constructor where app-
                                  // ropriate - here to open the file.
    if (!inFile.is_open()) {      // if the file couldn't be opened
        cerr << "Unable to open \"" << fileName << "\" for reading!\n\n";
        return EXIT_FAILURE;      // exit main() returning a value that
    }                             // indicates an error

    cout << "Reading file \"" + fileName + "\":\n";

    size_t numCustomers;
    if (!(inFile >> numCustomers)) {  // read the number of customers before-
                                      // hand since this value is not part of
                                      // a customer record.
        cerr << "Couldn't read number of customers from \"" << fileName << "\"!\n\n";
        return EXIT_FAILURE;
    }

    // use an istream_iterator that will use our stream extraction operator
    // to read customers from inFile until it reaches EOF or an error occurs.
    vector<Customer> Customers{ istream_iterator<Customer>{ inFile },
                                istream_iterator<Customer>{} };

    if (numCustomers != Customers.size()) {  // check if the number of customers
                                             // specified in the file matches
                                             // the number of customers we
                                             // were able to extract.
        cerr << "Number of customers specified in \"" << fileName
             << "\" does not match the number of customers read!\n\n";
        return EXIT_FAILURE;  // if the numbers don't match there was an error
    }                         // while reading the records from the file

    for (auto const &c : Customers)  // just to check print the customers
        std::cout << c << '\n';
}

您可以使用流提取和流插入运算符来读取/写入自定义数据类型:

#include <cstddef>   // std::size_t
#include <cstdlib>   // EXIT_FAILURE
#include <iterator>  // std::istream_iterator<>
#include <vector>    // std::vector<>
#include <string>    // std::string
#include <fstream>   // std::ifstream
#include <iostream>  // std::cout, std::cerr, std::ostream, std::istream

using namespace std;

struct Customer {
    string first_name, last_name;
    int years;
    float amount, interest_rate, amount_per_month;
};

// define a stream extraction operator that takes a Customer on the right hand side
// usage examples: std::cin >> customer;
//                 file >> customer;
istream& operator>>(istream &is, Customer &customer)
{
    // don't write directly into the members of Customer to not leave
    // the object in a flunky state if extraction fails for some value.
    string first_name, last_name;
    int years;
    float amount, interest_rate, amount_per_month;

    if (!(is >> first_name >> last_name >> years >> amount >> interest_rate >> amount_per_month))
        return is;  // if extraction of a value fails end here

    // if we reach here all values have been read successfully and can be
    // assigned to the customer:
    customer = { first_name, last_name, years, amount, interest_rate, amount_per_month };
    return is;
}

// define a stream insertion operator that takes a Customer on the right hand side
// usage examples: std::cout << customer;
//                 file << customer;
ostream& operator<<(ostream &os, Customer const &customer)
{
    os << customer.first_name << ' ' << customer.last_name << '\n' << customer.years << ' ' 
       << customer.amount << ' ' << customer.interest_rate << ' ' << customer.amount_per_month;

    return os;
}

int main()
{
    cout << "Enter filename: ";
    string fileName;
    cin >> fileName;

    ifstream inFile{ fileName };  // define variables as close to where they're
                                  // used. Use the constructor where app-
                                  // ropriate - here to open the file.
    if (!inFile.is_open()) {      // if the file couldn't be opened
        cerr << "Unable to open \"" << fileName << "\" for reading!\n\n";
        return EXIT_FAILURE;      // exit main() returning a value that
    }                             // indicates an error

    cout << "Reading file \"" + fileName + "\":\n";

    size_t numCustomers;
    if (!(inFile >> numCustomers)) {  // read the number of customers before-
                                      // hand since this value is not part of
                                      // a customer record.
        cerr << "Couldn't read number of customers from \"" << fileName << "\"!\n\n";
        return EXIT_FAILURE;
    }

    // use an istream_iterator that will use our stream extraction operator
    // to read customers from inFile until it reaches EOF or an error occurs.
    vector<Customer> Customers{ istream_iterator<Customer>{ inFile },
                                istream_iterator<Customer>{} };

    if (numCustomers != Customers.size()) {  // check if the number of customers
                                             // specified in the file matches
                                             // the number of customers we
                                             // were able to extract.
        cerr << "Number of customers specified in \"" << fileName
             << "\" does not match the number of customers read!\n\n";
        return EXIT_FAILURE;  // if the numbers don't match there was an error
    }                         // while reading the records from the file

    for (auto const &c : Customers)  // just to check print the customers
        std::cout << c << '\n';
}

@Ruks对于您链接的问题,接受的答案会调用未定义的行为,因为通过
std::istream::read
/
std::ostream::write
写入/读取非POD类型。不要建议依赖未定义行为的某些行为。是的,我知道那里有一些答案,它们不会调用UB,而是典型的用户将首先查找接受的答案。@Ruks对于您链接的问题,接受的答案会调用未定义的行为,因为通过
std::istream::read
/
std::ostream::write
写入非POD类型。不要建议依赖未定义行为的某些行为。是的,我知道那里有答案,这不会调用UB,但典型的用户会首先使用已接受的答案。如果添加注释来解释您所做的事情,答案会更好——无论是作为代码中的注释还是作为代码外的描述。如果添加注释来解释您所做的事情,答案会更好——无论是作为代码中的注释还是作为描述代码的ide。