首页 > 解决方案 > 面向对象编程获取函数不返回正确的数组

问题描述

这是我有问题的代码。它从文本文件中读取 pin 码,并应使用面向对象编程将它们保存到数组中。当我尝试在 while 循环中显示值时,它可以正常工作,但是当我尝试在 while 循环之外执行时,它不起作用。例如在倒数第二行 cout 不起作用。

   #include "branjeDatoteke.h"
    #include "parametri.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstring>

    using namespace std;
    void branjeDatoteke() {
    Parametri pin[101];
    string line;
    ifstream myfile("pin.txt");
    if (myfile.is_open())
    {
        for (int i = 0; i <= 100; i++) {
            while (getline(myfile, line))
            {

                pin[i].setPin(line);
                cout << pin[i].readPin() << endl;
                //cout << line << '\n';
            }
        }
        myfile.close();
        cout <<"tole more delat: "<< pin[2].readPin() << endl;
    }

    else cout << "Unable to open file";
}

这是我的 Parametri 类的 CPP 文件

#include "parametri.h"
using namespace std;
#include <iostream>

void Parametri::setPin(string pin) {
    this->pinKoda = pin;
}

string Parametri::readPin() {
    return pinKoda;
}

标签: c++arraysclassoop

解决方案


你在一个循环中有一个循环......

随着第一次迭代

for (int i = 0; i <= 100; i++) { ... }

由于内部循环,您将读取文件的所有内容

while (getline(myfile, line))

外部for循环的第二次迭代根本不会读取任何内容,接下来的 99 次迭代也不会。

这当然意味着pin[2](或实际上pin[1]to pin[100])将被初始化。只有pin[0],它会以文件中的最后一个值结束(因为内部while循环会一遍又一遍地覆盖它)。


您应该将代码更改为单个循环,可能是这样的:

for (int i = 0; i <= 100 && getline(myfile, line); i++)
{
    pin[i].setPin(line);
}

请注意,此循环可能会在您填充pin数组的所有元素之前结束。如果文件中的数据更少(或更多!),您可能应该使用 astd::vector而不是数组。


推荐阅读