-1

我的程序似乎有一些问题。它编译得很好,但是当我进入第一个循环时,它要求我输入一个正整数,而不是像它假设的那样再次要求我。比它跳下一个空白空间并且不会继续运行,直到你输入另一个它不应该做的数字。但是,当您输入一个数字时,它会返回并要求我输入一个整数,就像它对问题的假设一样,它会无限次执行此操作,直到我退出程序。关于为什么会发生这种情况的任何建议?

/* Search the entries of the n X n matrix mat in rowwise order for an entry to item */
#include <iostream>

using namespace std;

int main(void)

{ 

int n=10, item, row=3, col=3, mat[row][col];
bool found;

for (int row = 0; row < 3; row++)
        for (int col = 0; col < 3; col++)
        {
                cout << "Enter Positive Integer :  ";
                        cin >> row;
                cout << " Enter Positive Integer : ";
                cin >> mat[row][col];
        }

cout << "Enter a positive integer you want to be searched: ";
        cin >> item;


for(int i=0; i<row; ++i)
{
     for(int j=0; j<col; ++j)
     {
          if(mat[row][col] == item)
              found = true;
          else
               found = false;
     }  
}

if(found==true)
  cout << "item found" ;
else
    cout << "item found ";

return 0;
}
4

4 回答 4

4

该行for (int cols = 0; cols < 5; col++)增加变量col,而不是cols。由于cols始终为 0,因此循环将永远不会终止。

你在for (int rows = 0; rows < 5; row++). 由于循环条件中的拼写错误,经常发生无限循环;)

我还想指出您搜索过程中的一些逻辑错误:

for(int i=0; i<row; ++i)
{
     for(int j=0; j<col; ++j)
     {
          if(mat[row][col] == item)
              found = true;
          else
               found = false;
    }  
}

当该循环结束时,found只会是trueif mat[row-1][col-1] == item(最后一个元素)。哎呀,row永远col不要在循环中改变,所以你每次都在重复检查完全相同的元素!如果您不掌握变量名称,您还应该期待更时髦的程序行为。我强烈建议添加调试语句以查看您的变量在整个程序中是如何被修改的(又名:cout << "rows = " << rows << endl;、和cout << "i = " << i << endl;等)。当您重用变量时,您正在为灾难做准备。

免责声明:重用变量并不总是一件坏事。但是,在您对变量有更深入的了解之前,最好避免使用它。

于 2013-09-04T18:36:41.983 回答
0

在我看来,您对循环计数器和用户输入存储使用相同的变量。那注定不会为所欲为。执行以下操作:

for (rowCounter = 0; rowCounter < 3; rowCounter++) {
    for (colCounter = 0; colCounter < 3; colCounter++) {
        cout << “Give me value for (“ << rowCounter << “,” << colCounter << “) :”;
        cin >> mat[rowCounter][colCounter];
    }
}

然后是你的其余代码

于 2013-09-04T18:55:21.970 回答
0

在您的循环中,您正在递增rowcol不是rowsand cols

于 2013-09-04T18:37:50.253 回答
0

看来你有几个问题。

  1. 在第一个 for 循环中,您增加了错误的变量(col 而不是 cols),您还在 3x3 矩阵中从 0 变为 4
  2. 您要求用户输入 2 个数字,然后您要求用户在矩阵中输入一个数字,但它只是一个 3x3 矩阵,用户很容易超出范围。我认为您要做的是用用户编号填充矩阵。所以我做了那个改变。
  3. 在第二个for循环中,你设置了found = true,但是循环会一直进行下去,意思是它搜索到的最后一个数字,如果是false,那么found = false,也把它改成了mat[i][j]而不是mat [row][col],所以它不会每次都检查同一个。
  4. found = true 和 found = false 都会返回“找到的项目”,我认为您在第二个硬编码字符串中省略了“不”。
  5. 我添加了一个暂停,以便您可以在最后阅读输出。

我修复了它们,我认为这段代码应该做你现在想要的。

#include <iostream>

using namespace std;

int main(void)

{ 

  int n=10, item, row = 3, col = 3;
  int mat[3][3];
  bool found = false;
  int j,k;

  for (int rows = 0; rows < 3; rows++)
      for (int cols = 0; cols < 3; cols++)
      {
            cout << "Enter row Integer: ";
            cin >>j;
            cout << "Enter col Integer: ";
            cin >> k;
            cout << "Enter Positive Integer :  ";
            cin >> mat[j][k];
      }

  cout << "Enter a poistive integer you want to be searched: ";
  cin >> item;


  int flag = 0;

  for(int i=0; i<row; ++i)
  {
     for(int j=0; j<col; ++j)
     {
        if(mat[i][j] == item)
        {
            flag = flag + 1;
        }
     }  
  }

  if(flag > 0)
   found = true;

  if(found==true)
  cout << "item found" ;
  else
  {
     cout << "item not found ";
  }

   system("PAUSE");

   return 0;
}
于 2013-09-04T19:13:32.030 回答