Reputation: 21
#include<stdio.h>
#define M 6
#define N 5
int main(){
int array[N][M];
int i, j;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
scanf("%d", &array[i][j]);
if(array[0][1]<1 || array[0][2]<1 || array[0][3]<1){
// ??
}
}
}
return 0;
}
How do I make it so that if the input doesn't match my (very likely wrong) if statement, the
user must reinput that array field and it doesnt just skip to the next input field?
Upvotes: 2
Views: 109
Reputation: 35491
How do I make it so that if the input doesn't match my (very likely wrong) if statement, the user must reinput that array field and it doesnt just skip to the next input field?
You can have the condition of your if
statement determine how the loop variables (that serve as array indexes) are updated:
for(i=0;i<N;i++){ // dont update i here
for(j=0;j<M;j++){ // dont update j here
Instead use a while
loop that updates i
and j
if your condition is satisfied as well as if there are any rows and columns left:
while(1) {
printf("Enter value: ");
scanf("%d", &array[i][j]);
printf("array[%d][%d] = %d\n", i, j, array[i][j]);
if(YOUR_CONDITION) {
// update i and j inside this statement
// this means the user can advance to the next array element
// ONLY if your if statement condition is true
if(j < M-1) { // if there are columns left, update j
j++;
}
else if(i < N-1) { // otherwise, if there are rows left, reset j and update i
j = 0;
i++;
} else {
break; // if we reach this point we are out of rows and columns and we break out of the loop
}
} else {
printf("Please satisfy the condition!\n");
}
}
Now, as far as YOUR_CONDITION
:
if(array[0][1]<1 || array[0][2]<1 || array[0][3]<1)
The problem with this statement is that it is checking values in the array that weren't yet entered by the user.
If you specify what you want to do with this statement, maybe I can be of further help.
Upvotes: 1
Reputation: 465
To solve this you can simple do the following. If input is wrong, decrement j by 1 to force the user to reinput the same field. It may also make sense to tell the user that their input was wrong, so they know to enter the proper value.
Upvotes: 0