gpt4 book ai didi

c++ - 使用指针传递数组值

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:59 25 4
gpt4 key购买 nike

我有两个函数,一个用于文件读取,另一个用于数字的小排序。使用函数 read() 我正在读取文件的每一行并将每一行放入数组中。文件看起来像:

1
2
3

使用函数 sort() 我只想打印值大于 1 的数字。

出了什么问题:我打印了两个数组,但我的排序数组仍然打印所有值,不仅大于 1。

我的代码:

    #include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;

class UZD
{
private:
int numLines;
int *value;
public:
UZD();
int * read();
int sort();
};
// =========================================================
UZD::UZD()
{
}
// =========================================================
int * UZD::read(){
ifstream myfile("stu.txt");
int value[20];
string line[20];
int i=0;
while(!myfile.eof() && i < 20) {
getline(myfile,line[i]);
++i;
}
numLines = i;
for (i=0; i < numLines; ++i) {
value[i] = atoi(line[i].c_str());
cout << i << ". " << value[i]<<'\n';
}
return value;
}
// =========================================================
int UZD::sort(){
int *p;
p = read();
int i;
if(p[i] > 1) {
cout << p <<'\n';
}
}
// =========================================================
int main() {
UZD wow;
wow.read();
wow.sort();
}

最佳答案

您的代码中有很多问题,最明显的一个是 read() 方法中的“返回值”。值是一个本地数组,一旦超出 read() 的范围就会消失。设计也似乎有问题。您调用了 read() 两次,一次是从 main() 调用,一次是从 sort() 内部调用。我已经使用 vector 编写了一个工作代码。可能这就是您所期待的:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>

using namespace std;

class UZD
{
private:
int numLines;
vector<int> value;
public:
UZD();
vector<int> & read();
void sort();
};
// =========================================================
UZD::UZD()
{
}
// =========================================================
vector<int> & UZD::read(){
ifstream myfile("stu.txt");
vector<string> line(20);
int i=0;
while(!myfile.eof() && i < 20) {
getline(myfile,line[i]);
++i;
}
numLines = i;
cout << "After reading file: " << endl;
for (i=0; i < numLines; ++i) {
value.push_back(atoi(line[i].c_str()));
cout << i << ". " << value[i]<<'\n';
}
return value;
}
// =========================================================
void UZD::sort(){
cout << "Inside sort()" << endl;
for(int i=0; i<value.size(); ++i){
if(value[i] > 1)
cout << value[i] << endl;
}
}
// =========================================================
int main() {
UZD wow;
wow.read();
wow.sort();
return 0;
}

为了清楚起见,我保留了相同的变量名称。如果您没有得到任何信息,请告诉我。

关于c++ - 使用指针传递数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com