打印列表向后

时间:2013-04-23 17:46:12

标签: c++

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

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] << " ";
}

5 个答案:

答案 0 :(得分:6)

这是罪魁祸首:

array1[x] = x;

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

答案 1 :(得分: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]未初始化

答案 2 :(得分:4)

由于行array1[x]=x;,您遇到了问题。如果文件中的数字是0..9,你的代码实际上会工作,但是最后的数字是另一个0,所以你不要将array1 [9]设置为任何东西。

你应该有一些变量来索引数组,例如:

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

答案 3 :(得分: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;;

答案 4 :(得分:0)

你向上计算错误并最终在你的阵列之后击中未初始化的内存。您应该将数组的长度作为参数传递给函数 当数组衰减到指针时,你将无法恢复它的长度。

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

然后你不需要弄清楚它的长度如此复杂。