繁体   English   中英

Object 面向编程得到 function 不返回正确的数组

[英]Object oriented programming get function doesn't return correct array

这是我有问题的代码。 它从文本文件中读取 pin 码,并应使用面向 object 的编程将它们保存到数组中。 当我尝试在 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";
}

这是我的参数 class 的 CPP 文件

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

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

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

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

随着第一次迭代

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

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

while (getline(myfile, line))

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

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


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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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