gpt4 book ai didi

C++ 在函数中写入数组

转载 作者:行者123 更新时间:2023-11-28 02:28:09 27 4
gpt4 key购买 nike

问题是当“ReadFile”函数运行后,当我尝试在 main 中访问它们时,数组“data”的内容更改为这些看似随机的数字。对于相同的输入,数字是相同的。我认为它与指针或引用有关,但我不知道它是什么。

例子:

输入:

4000

-2500

12

-600

-700

3000

输出:

Number of lines: 6

2686316

4706252

1

1991562344

4661696

4703488

代码:

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

using namespace std;
const int MAXN = 100;

string ReadFileName(string& filename) {
cout << "The name of the file: ";
cin >> filename;
return filename;
}

int ReadFileLength(int& linecount, string filename) {
ifstream f;
bool error;
do {
ReadFileName(filename);
f.open(filename.c_str());
error=f.fail();
if(error) {
cout << "Error while tying to open file." << endl;
f.clear();
}
}
while (error);

int tmp;
while (f >> tmp) {
linecount++;
}
f.close();
return linecount;
}

void ReadFile(int* data, int linecount, string filename) {
ifstream f;
f.open(filename);
for(int i=0; i<linecount; i++)
f >> data[i];
f.close();
}

int main() {
int data[MAXN];
bool error;
int readmethod;
int linecount = 0;
string filename;

do {
message1();
cin >> readmethod;
error = cin.fail() || ((readmethod!=1) && (readmethod!=2));
if (error) {
cout << "Wrong Data!" << endl;
cin.clear(); string tmp; getline(cin, tmp, '\n');
}
}
while(error);

if (readmethod==1) {
ReadFileLength(linecount, filename);
ReadFile(data, linecount, filename);
}
else {
//Implement later
}

cout << "Number of lines: " << linecount << endl;

for (int i=0; i<linecount; i++) {
cout << data[i] << endl; //THIS IS WHERE TO PROBLEM SHOWS UP
}

return 0;
}

我从代码中省略了“message1”和“ReadFileLength”函数,因为它们工作正常。

最佳答案

我的 Crystal 球说:

您的 ReadFileLength 不仅计算长度,还询问文件名。
很遗憾,您忘记将该参数作为引用传递 (std::string& filename),或者忘记分配给该参数。
因此,当函数返回时,文件名仍然是空字符串,并且打开具有该名称的文件注定会失败。

顺便说一句,询问文件名和检索文件的长度听起来像是两个不相关的函数,它们都返回一个值,而不是一个函数。

关于C++ 在函数中写入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820706/

27 4 0
文章推荐: javascript - 来自浏览器后退按钮时不会触发更改事件
文章推荐: html - 即使 html 文件没有错误,标记验证也没有显示绿色横幅
文章推荐: c++ - 将指针转换为 LPVOID*
文章推荐: javascript - 一行中的多个