c++ - 面向对象编程获取函数不返回正确的数组
问题描述
这是我有问题的代码。它从文本文件中读取 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;
}
解决方案
你在一个循环中有一个循环......
随着第一次迭代
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
而不是数组。
推荐阅读
- javascript - 在 for 循环中使用 FileReader 的 JavaScript“内存不足”错误
- python - 遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列
- r - 将列的组合转换为某种可解释的变量
- hadoop - Hortonworks Sanbox 错误:连接到 http://sandbox-hdp.hortonworks.com:50070 失败
- dialogflow-es - 从 Dialogflow 创建慢速回复
- javascript - 当更改为本地时,onSnapshot fromCache 始终为 false
- javascript - 如何在 React Native 中显示 expo 相机的图像
- excel - Excel 公式在 x 行后停止工作
- javascript - 打字稿中的联合返回类型
- typescript - 使用打字稿处理未定义的返回