0

我遇到了这个程序的问题,它是向前和向后打印出一个列表,但是当我向后打印出列表时,列表中的第一个数字是一个随机的大量数字而不是正确的数字。例如

0 1 2 3 4 5 6 7 8 0
4286398 8 7 6 5 4 3 2 1 0

谁能解释一下我的代码有什么问题。

还有谁能告诉我如何将计数器从 printList 函数传递给一个名为 checkList() 的新函数,以便计数器在 checkList() 中的值与 printList() 末尾的值相同。

代码:

void printList(int array1[]){
int counter = 0;
int x;
ifstream theFile("list.txt");

while(theFile >> x){
    array1[x] = x;
    cout << array1[x] << " ";
    counter = counter + 1;
}
cout << endl << counter << endl;;

int n = counter;

for(int i = n -1; i >= 0; i--){
    cout << array1[i] << " ";
}
4

5 回答 5

6

这是罪魁祸首:

array1[x] = x;

如果您的数组输入值为0 1 2 3 4 5 6 7 8 0,那么在循环的最后一次迭代中,您正在执行array1[0] = 0. 这会覆盖数组中的第一项,同时增加计数器。然后,当您反转它时,它array[9]包含垃圾值,因为您从未设置它。

于 2013-04-23T17:49:57.313 回答
4

你有问题是因为线路array1[x]=x;。如果文件中的数字是 0..9,那么您的代码实际上可以工作,但最终数字是另一个 0,因此您不要将 array1[9] 设置为任何值。

您应该有一些用于索引数组的变量,例如:

int counter = 0;
while(theFile >> x){
    array1[counter] = x;
    cout << array1[counter] << " ";
    counter = counter + 1;
}
于 2013-04-23T17:52:57.937 回答
4

你在做

array1[0] = 0;
array1[1] = 1;
array1[2] = 2;
array1[3] = 3;
array1[4] = 4;
array1[5] = 5;
array1[6] = 6;
array1[7] = 7;
array1[8] = 8;
array1[0] = 0; // here

array1[9] 未初始化

于 2013-04-23T17:51:09.040 回答
1

您在代码中有一些严重的问题:

ifstream theFile("list.txt");
while(theFile >> x){
   array1[x] = x;//^^this is evil
   cout << array1[x] << " ";
   counter = counter + 1;
}
cout << endl << counter << endl;;
                             //^^extra colon, though not wrong here but not good practice

您从文件中读取并填充数组,在您的特殊情况下,您有:

0 1 2 3 4 5 6 7 8 0

你有 10 个元素,但你的array1意志最终会9因为上次阅读0和再次array1[0]被写入0。因此,当您输出 时array1,您将永远不会得到10数字,因为您的数组实际上存储了 9 个数字。这就是为什么你在尝试访问array1[9]一些垃圾原始内存值时看到垃圾值的原因,该值尚未被填充。

相反,您可以尝试执行以下操作:

int counter = 0;
int x;
ifstream theFile("list.txt");

while(theFile >> x){
    array1[counter] = x;
    cout << array1[counter] << " ";
    counter = counter + 1;
}
cout << endl << counter << endl;;
于 2013-04-23T17:56:36.360 回答
0

您向上计数错误并最终在您的数组之后遇到未初始化的内存。您应该将数组的长度作为参数传递给您的函数。
随着数组衰减为指针,您将无法恢复其长度。

void printList(int array1[], into size){ }

那么你就不需要那么复杂地计算它的长度了。

于 2013-04-23T17:50:57.760 回答