当前位置:   article > 正文

C++ 读取文本文件(文件输入/输出)_c++读取文件内容

c++读取文件内容

目录

一、文件的输出

二、读取文本文件

三、编程实例


一、文件的输出

        对于文件的输入C++使用类似于cout的东西

        1.必须包含头文件iostream、fstream

        2.需要声明一个或者多个ofstream变量,并为他命名

        3.使用完文件后 要用close()将其关闭

        4.可以结合ofstream对象和运算符<<来输出各种类型的数据

命名方式

ofstream outFile;

将对象与特定的文件关联起来

outFile.open("giantfox.txt");

下面是将所输出的内容写到文件giantfox.txt 文件下

  1. #include<iostream>;
  2. using namespace std;
  3. #include<string>
  4. #include<fstream>
  5. int other() {
  6. char automobile[50];
  7. int year;
  8. double a_price;
  9. double d_price;
  10. ofstream outFile;
  11. outFile.open("giantfox.txt");
  12. cout << "ENter athe make ";
  13. cin.getline(automobile, 50);
  14. cout << "Enter the model year: ";
  15. cin >> year;
  16. cout << "Enter the original asking price: ";
  17. cin >> a_price;
  18. d_price = 0.913 * a_price;
  19. outFile << fixed;
  20. outFile.precision(2);
  21. outFile.setf(ios_base::showbase);
  22. outFile << "Make and model: " << automobile << endl;
  23. outFile << "Year: " << year << endl;
  24. outFile << "Was asking $" << a_price << endl;
  25. outFile << "Now asking $ " << d_price << endl;
  26. outFile.close();
  27. return 0;
  28. }

文件输入成功 

二、读取文本文件

要求:

        

        1.必须包含头文件iostream、fstream

        2.需要声明一个或者多个ifstream变量,并为他命名

        3.使用完文件后 要用close()将其关闭

        4.可以结合ifstream对象和运算符>>来读取各种类型的数据

        5.可以使用cin和get()来读取一个字符 使用cin getline()读取一行字符

        6.可以结合使用cin和eof()、fail()方法来判断输入是否成功

声明对象

ifstream inFile;

将对象和实例结合

inFile.open("giant fox");

检查一个文件是否打开

inFile.open("giant fox.txt");

if (!inFile.is_open())

{

        exit(EXIT_FAILTURE);

}

如果文件成功打开,方法is_open将返回true;因此如果文件没有被打开此条件语句的返回值将为true。函数exit的原型是再头文件cstdlib定义的,在该头文件中,还定义了一个用于同操作系统通信的参数值EXIT_FAILTURE.函数exit()终止程序

检查文件是否读取到文本末尾

if (inFile.eof())
    {
        cout << "End of the file reached\n";

    }

当文件打开失败

    else if (!inFile.fail()) {
        cout << "Input terminated by data mismatch. \n";
    }
    else
        cout << "Unknown reason. \n";

统计文件字符小程序

  1. #include<iostream>;
  2. #include<cstdlib>
  3. using namespace std;
  4. #include<cctype>
  5. #include<string>
  6. #include<fstream>
  7. int other() {
  8. ifstream inFile;
  9. char fileame[50];
  10. cout << "Enter name of data file: ";
  11. cin.getline(fileame, 50);
  12. inFile.open(fileame);
  13. if (!inFile.is_open()) {
  14. cout << "Could not open the file ";
  15. exit(EXIT_FAILURE);
  16. }
  17. char value;
  18. int count = 0;
  19. inFile >> value;
  20. while (inFile.good())
  21. {
  22. count++;
  23. inFile >> value;
  24. }
  25. if (inFile.eof())
  26. {
  27. cout << "End of the file reached\n";
  28. }
  29. else if (!inFile.fail()) {
  30. cout << "Input terminated by data mismatch. \n";
  31. }
  32. else
  33. cout << "Unknown reason. \n";
  34. if (count == 0)
  35. cout << "No database";
  36. else
  37. {
  38. cout << "该文件有: "<<count <<"个字符" << endl;
  39. }
  40. return 0;
  41. }

三、编程实例

编写一个程序,记录捐助给"维护合法权利团体"的资金。该程序要求用户输入捐赠者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被存储在一个动态分配的结构数组中.每个数据结构有两个成员:用来存储姓名的字符串数组(或string对象)和用来存储款项的double成员。读取所有的数据后,程序将显示所有捐款超过10000的捐款着姓名及其捐款数额。该列表前应包含一个标题,指出下面的捐款者是重要捐款人(Grand Patrons)。然后,程序将列出其他的捐款者,该列表要以Partons开头。如果某种类别没有捐款者,则程序将打印单词"none"。该程序只显示这两种类别,而不进行排序。

  1. #include<iostream>;
  2. using namespace std;
  3. #include<cctype>
  4. struct donor {
  5. string name;
  6. double money;
  7. };
  8. void display(donor donors[], int number, bool isGrand) {
  9. int count = 0;
  10. if (isGrand) {
  11. for (int i = 0; i < number; i++) {
  12. if (donors[i].money > 10000) {
  13. count++;
  14. cout << donors[i].name << endl;
  15. cout << donors[i].money << endl;
  16. }
  17. }
  18. }
  19. else
  20. {
  21. for (int i = 0; i < number; i++) {
  22. if (donors[i].money <= 10000) {
  23. count++;
  24. cout << donors[i].name << endl;
  25. cout << donors[i].money << endl;
  26. }
  27. }
  28. }
  29. if (number == 0)
  30. {
  31. cout << "None" << endl;
  32. }
  33. }
  34. int other() {
  35. cout << "Enter the donors of number: ";
  36. int number;
  37. cin >> number;
  38. donor* donors = new donor[number];
  39. for (int i = 0; i < number; i++) {
  40. cout << "Enter the donor #"<<i+1<<" of name: ";
  41. cin >> donors[i].name;
  42. cout << "Enter the doctnation #"<<i+1<<"money: ";
  43. cin >> donors[i].money;
  44. }
  45. cout << "***A****" << endl;
  46. display(donors, number, true);
  47. cout << "***B****" << endl;
  48. display(donors, number, false);
  49. return 0;
  50. }

完成上述编程后,从文件中读取所需的信息。该文件的第一项应为捐款人数,余下的内容应为对的行。在每一对中,第一行为捐款人姓名,第二行为捐款数额。即该文件类似于下面:

4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000
 

  1. #include<iostream>;
  2. using namespace std;
  3. #include<cctype>
  4. #include<fstream>
  5. #include<cstdlib>
  6. struct donor {
  7. char name[20];
  8. double money;
  9. };
  10. void display(donor donors[], int number, bool isGrand) {
  11. int count = 0;
  12. if (isGrand) {
  13. for (int i = 0; i < number; i++) {
  14. if (donors[i].money > 10000) {
  15. count++;
  16. cout << donors[i].name << endl;
  17. cout << donors[i].money << endl;
  18. }
  19. }
  20. }
  21. else
  22. {
  23. for (int i = 0; i < number; i++) {
  24. if (donors[i].money <= 10000) {
  25. count++;
  26. cout << donors[i].name << endl;
  27. cout << donors[i].money << endl;
  28. }
  29. }
  30. }
  31. if (number == 0)
  32. {
  33. cout << "None" << endl;
  34. }
  35. }
  36. int other() {
  37. ifstream inFile;
  38. inFile.open("giantfox.txt");
  39. char value;
  40. if (!inFile.is_open()) {
  41. cout << "Could not open the file: ";
  42. exit(EXIT_FAILURE);
  43. }
  44. int number = 0;
  45. inFile >> number;
  46. char ch[30];
  47. inFile.getline(ch, 1);
  48. donor* donors = new donor[number];
  49. for (int i = 0; i < number; i++) {
  50. inFile.getline(donors[i].name, 30);
  51. inFile >> donors[i].money;
  52. inFile.getline(ch, 1);
  53. }
  54. cout << "******Grand Partons******" << endl;
  55. display(donors, number, true);
  56. cout << "******Partons******" << endl;
  57. display(donors, number, false);
  58. delete[] donors;
  59. return 0;
  60. }

附注:在读取文本的时候 结构体的字符串类型要发生改变,不然getline函数用不了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/690192
推荐阅读
相关标签
  

闽ICP备14008679号