所以我试着读一个简单的文本文件。该文件有 名,得分,播放
当我调用该函数时,第一行效果很好。下一行不起作用。但是看到我将值读入temp。 Temp具有正确的信息,它不会分配给传递给它的数组。似乎数组具有第一行的值,就像在第一行之后它们都得到相同的值。
例如,文本文件如下所示: 一个,1,2- 2,3,4-
在函数中,第一行按预期读取并进入数组。
下一行和其他人没有。值temp是正确的,并且正确地从文件中读取它没有进入数组
int numberOfScore = 0;
char scoreName[10][35];
int scoreScore[10];
int scorePlays[10];
// load and previous scores
scoreRead( scoreName, scoreScore, scorePlays, numberOfScore );
以上是电话,下面是电话。
void scoreRead(char scoreName[][35], int scoreScore[], int scorePlays[], int &numberOfScore )
{
char temp[35];
ifstream ifs;
numberOfScore=0;
ifs.clear();
ifs.open("gameScore.txt");
if (ifs.good())
{
do {
ifs.clear();
ifs.getline(temp , MAX_STR_LEN, ',');
strcpy(scoreName[numberOfScore],temp);
ifs.getline(temp, MAX_STR_LEN, ',');
scoreScore[numberOfScore] = atoi(temp);
ifs.getline(temp, MAX_STR_LEN);
scorePlays[numberOfScore] = atoi(temp);
numberOfScore ++;
} while (ifs.good());
}
ifs.close();
}
答案 0 :(得分:0)
我想我知道你要做什么以及为什么它不起作用。 数组在函数内部具有所需的值,但是一旦退出函数,数组中的值就会消失。
这个函数无法传递值的原因是在C / C ++中,函数参数传递了函数原型的值,创建了局部变量并遮蔽了假设的全局变量。
你得到第一行的原因是数组名称被视为指针,可以代表第一个元素(粗略地说)。
有三种方法可以完成这项工作。
1. make the variables global (easiest, and code posted below, but not suggested)
2. pass in pointers to array
3. pass in references to array
方法1的代码:
$ cat getScore.cpp
#include<iostream>
#include<fstream>
#define MAX_STR_LEN 100
using namespace std;
int numberOfScore = 0;
char scoreName[10][35];
int scoreScore[10];
int scorePlays[10];
void scoreRead()
{
char temp[35];
ifstream ifs;
numberOfScore=0;
ifs.clear();
ifs.open("gameScore.txt");
if (ifs.good())
{
do {
ifs.clear();
ifs.getline(temp , MAX_STR_LEN, ',');
cout<<temp<<endl;
strcpy(scoreName[numberOfScore],temp);
cout<<scoreName[numberOfScore]<<endl;
ifs.getline(temp, MAX_STR_LEN, ',');
scoreScore[numberOfScore] = atoi(temp);
cout<<scoreScore[numberOfScore]<<endl;
ifs.getline(temp, MAX_STR_LEN);
scorePlays[numberOfScore] = atoi(temp);
cout<<scorePlays[numberOfScore]<<endl;
numberOfScore ++;
cout<<numberOfScore<<endl;
} while (ifs.good());
}
ifs.close();
}
int main(){
// load and previous scores
scoreRead();
cout<<cout<<scoreName[1]<<endl;
return 0;
}