2d数组传递给函数不赋值

时间:2014-05-01 22:28:31

标签: c++ arrays

所以我试着读一个简单的文本文件。该文件有 名,得分,播放

当我调用该函数时,第一行效果很好。下一行不起作用。但是看到我将值读入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();

}

1 个答案:

答案 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;
}