二维 vector 矩阵的输入首先是一个询问矩阵大小的输入,它工作正常。但是代码的部分要求是矩阵中的值必须在 -100 到 100 之间,但是我为将值保持在该范围内而设置的缓冲区会导致矩阵在行重新设置时乱序进入。
我真的不知道问题的根源,所以我不知道该尝试什么。我得到的最深入的结果是确定问题的根源是当缓冲后重新输入行时,该行在最终矩阵中以乱序结束,这是我在分配所有值后通过可视化矩阵确定的。
/**Matrix Input**/
int main(){
cout << "Enter size of matrix: ";
int n = 0;
cin >> n;
cout << endl;
vector<vector<int> > arr (n, vector<int>(n));
cout << "Enter Format: \na b c[en.]\nd e f[en.]\ng h i[en.]" << endl;
for (int i = 0; i < n; i++){
cout << "Enter Line " << i + 1 << endl;
for (int r = 0; r < n; r++){
cin >> arr[r][i];
/**Root of Error: Out of Specified Range**/
if (arr[r][i] > 100){
cout << endl;
cout << "Error: Value " << r + 1 << " is over 100. Please re-enter line" << endl;
i--;
break;
}
if (arr[r][i] < -100){
cout << endl;
cout << "Error: Value " << r + 1 << " is less than -100. Please re-enter line" << endl;
i--;
break;
}
}
}
/* Printing out the Matrix */
for (int i = 0; i < n; i++){
for (int r = 0; r < n; r++){
cout << arr[r][i] << " ";
}
cout << endl;
}
return 0;
}
当所有值都在范围内时,矩阵生成良好。例如,假设我输入行 {1 2 3}、{4 5 6} 和 {7 8 9}。它输出的矩阵是正确的。但是对于第二行,我输入了错误的 {4 500 6},然后继续将其更正为 {4 5 6}。我预计它会生成与示例第一行中所示矩阵相同的矩阵,但它生成了 {{1 2 3}、{6 4 5}、{6 7 8}}。对于必须重新输入一行或多行的任何情况都是如此。
我不知道这个问题的根源,所以不胜感激。
最佳答案
问题是当你输入
4 500 6
500 触发错误并退出循环,但 6
仍在那里等待读取。您的下一个 i
迭代将找到
6 <enter> 4 5 6
所以该行将是 6 4 5 并且“6”将保留在下一行
6 <enter> 7 8
您的最终 9
永远不会被程序处理。
如果你想按行工作,那么你需要读取字符串(使用 getline
)并自己将它们拆分成字段。
关于c++ - 对于代码中指定范围之外的值,对角差分算法的输入不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762972/