0

我有一个程序应该打印出 2 个像下面这样的列表,基本上相同的列表但向后,但是它第一次工作,但是它打印了一些奇怪的输出,我也会在下面显示。

0123456789
9876543210

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

样本输出

谁能告诉我我的代码有什么问题,我不知道为什么我会得到这个输出。

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);
}
4

3 回答 3

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

我认为,如果您将我的答案的所有内容放在一起,您应该或多或少有一些有用的东西。虽然我自己没有测试过。

于 2013-04-18T09:35:12.733 回答
1
void popArray(int array1[]){
ifstream infile("TEST1.txt");

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

}

您的循环没有改变x(或根本没有初始化x!)

于 2013-04-18T09:34:25.237 回答
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;
        }
    }
于 2013-04-18T09:34:12.670 回答