此回圈檢查陣列中的前一個元素。問題是如何避免檢查arr[0][0]導致未定義行為的先前元素?
這是到目前為止的代碼,但是第一個元素與其前一個元素一起檢查時存在這個問題。
int main()
{
int arr[2][4];
int k, n;
for (k = 0; k < 2; k ) {
for (n = 0; n < 4; n ) {
do {
printf("Provide a number");
scanf("%d", &arr[k][n]);
printf("This is %d in the position[%d][%d]\n", arr[k][n], k, n);
if (n==0) break;
printf("The arr[k][n] is %d and the arr[k][n-1] is %d and n-1 means %d\n", arr[k][n], arr[k][n - 1], n - 1);
} while (arr[k][n] <= arr[k][n - 1]); //Here is the issue
}
}
for (k = 0; k < 2; k ) {
for (n = 0; n < 4; n ) {
printf("%d\n", arr[k][n]);
}
}
}
問題:
添加if (n==0) break;導致程式允許添加比目前插入的數字更小的數字。雖然不包括此行會導致未定義的行為。如何解決這個問題?
這就是它現在的作業方式,這是不正確的:
2 3 4 5
2 4 5 6
這些printf陳述僅用于查看正在發生的事情。
uj5u.com熱心網友回復:
您只檢查上一列。這與您無關,break而是由于邏輯錯誤。
你可以這樣做:
int main()
{
int arr[2][4];
int k, n;
int last_number, new_number;
for (k = 0; k < 2; k ) {
for (n = 0; n < 4; n ) {
do {
printf("Provide a number");
scanf("%d", &new_number);
printf("This is %d in the position[%d][%d]\n", new_number, k, n);
if (n==0 && k == 0)
break; // Don't check for increasing values.
} while (new_number < last_number);
arr[k][n] = new_number;
last_number = new_number;
}
}
for (k = 0; k < 2; k ) {
for (n = 0; n < 4; n ) {
printf("%d\n", arr[k][n]);
}
}
}
uj5u.com熱心網友回復:
改變
while (arr[k][n] <= arr[k][n - 1]);
到
while (n > 0 && arr[k][n] <= arr[k][n - 1]);
這是因為 && 在 n == 0 時短路測驗并且不進行第二次測驗。
您還需要修復列印陳述句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/445792.html
上一篇:for...的迭代器而不關閉它
