程序异常输出

时间:2013-04-18 09:26:44

标签: c++

我有一个程序应该打印2个列表,如下一个列表,基本相同的列表但向后,但它第一次工作,但它打印一些奇怪的输出,我将显示下面。

0123456789
9876543210

但是我从我的程序得到的实际输出是:

sample Output

任何人都可以告诉我我的代码有什么问题,我不知道为什么我会得到这个输出。

void createFile(){
  ofstream myfile;
  myfile.open ("TEST1.txt");
  for(int x = 0; x < 10; x++){
   myfile << x << "\n";
  }
  myfile.close();
}

void popArray(int array1[]){
  ifstream infile("TEST1.txt");

  int x;
  while(infile >> array1[x]){
    cout << array1[x];
  }

}

void reverseList(int array2[]){
  for(int x = 9; x > -1; x--){
    cout << setw(2) << array2[x];
  }
} 

void checkLists(int array1[], int array2[], int sizeOfArray){
  for(int x = array1[1]; x < sizeOfArray; x++){
    for(int y = array2[1]; x < sizeOfArray; x++){
        if(x == y)
            cout << "Palindrome" << endl;
        else{
            cout << "Not" << endl;
        }
    }
  }

} 


int main()
{
  int array1[10];
  int array2[10];

  createFile();
  popArray(array1);

  cout << "\n";

  reverseList(array1);

  cout << "\n";
  checkLists(array1, array2, 10);
}

3 个答案:

答案 0 :(得分:2)

我认为这是个问题:

void popArray(int array1[]){
 ifstream infile("TEST1.txt");

 int x;
 while(infile >> array1[x]){
 cout << array1[x];
 }

}

你永远不会指明x是什么。如果我理解你要做什么,我认为这应该有效:

void popArray(int array1[]){
 ifstream infile("TEST1.txt");

 int x;
 for (x=0; x < 10; x++){
  cout << array1[x];
 }

}

再读一遍。你在这里也有错误:

void checkLists(int array1[], int array2[], int sizeOfArray){
 for(int x = array1[1]; x < sizeOfArray; x++){
 for(int y = array2[1]; x < sizeOfArray; x++){
     if(x == y)
        cout << "Palindrome" << endl;
     else{
        cout << "Not" << endl;
    }
    }
   }

}

我会做类似的事情:

bool checkLists(int array1[], int array2[], int sizeOfArray){

bool isPalindrome=true;
for(int x = 0; x < sizeOfArray; x++){

    if(array1[x] != array2[sizeOfArray-(x+1)]){
        isPalindrome = false;
        }
 }

return isPalindrome;
}  

然后在main结束时你可以:

if(checkLists(array1, array2, 10)){
 cout << "Is Palindrome\n";
}
else{
cout << "Is Not Palindrome\n";
}

虽然我在这里,但我也可以解决这个问题:

void reverseList(int array2[]){
for(int x = 9; x > -1; x--){
 cout << setw(2) << array2[x];
}
} 

将其更改为:

void reverseList(int array1[], int array2[]){
for(int i = 0; i < 10; i++){
  array2[9-i] = array1[i];
}
}

我认为,如果你将我的答案的所有部分放在一起,你或多或少会有一些有用的东西。我自己没有测试过它。

答案 1 :(得分:1)

void popArray(int array1[]){
ifstream infile("TEST1.txt");

    int x;
    while(infile >> array1[x]){
       cout << array1[x];
    }

}

您没有在循环中更改x(或根本没有初始化x!)

答案 2 :(得分:0)

for(int x = array1[1]; x < sizeOfArray; x++){
    for(int y = array2[1]; x < sizeOfArray; x++){if(x == y)
        cout << "Palindrome" << endl;
    else{
        cout << "Not" << endl;
    }
}

我应该用这个代替你的代码

 for(int x = 0; x < sizeOfArray; x++){
        for(int y = 0; y < sizeOfArray; y++){
if(array1[x]== array2[y])
            cout << "Palindrome" << endl;
        else{
            cout << "Not" << endl;
        }
    }