在将其实现到数组之前,有没有办法可以扫描int的值?

时间:2019-09-07 13:19:39

标签: c matrix

我想在这里将array[i][j]的值实现为自身,但是首先我必须检查它的值是否在-99到99之间。如果输入超出这些范围,则应停止输入该程序。

我用do-while循环尝试过,而现在我尝试了while循环。

#include <stdio.h>
#include <stdlib.h>

int main(){
    int array[2][2], i, n, j;

    /*
    do
    {
        printf("Value= ");
        scanf("%d", &n);
        array[i][j] = n;
        i++;
        j++;
    }

    while(n < 99 && n > -99);
    */
    while(array[i][j] < 99 && array[i][j] > -99){

        for(i = 0; i < 2; ++i){
            for(j = 0; j < 2; ++j){
                printf("Value= ");
                scanf("%d", &array[i][j]);
            }
        }
    }
    // Print the result
    for(i = 0; i < 2; ++i){
        for(j = 0; j < 2; ++j){
            printf("\n[%d][%d]: ", array[i][j]);
        }
    }
}

我遇到了一个无限循环,如果值不正确(超出这些边界),该循环不会退出。

2 个答案:

答案 0 :(得分:0)

在数组中不败的值中,第一次尝试检查内存中的随机数。因此,您的i j将是随机数。 将if语句放入for循环中以检查数组中的值,并在while循环中删除

答案 1 :(得分:0)

尝试一下,测试并工作:

int *array, i, val, n, m;

printf("Put in array size in the form of n-m where n is number of rows and m is number of columns: ");
scanf("%d-%d", &n, &m);
array = (int *) malloc(sizeof(int) * n * m);

i = 0;
while (i < n * m) {
  printf("Value for row: %d, column: %d: ", i / m + 1, i % m + 1);
  scanf("%d", &val);
  if (val > 99 || val < -99) continue;
  *(array + i) = val;
  i++;
}

for (i = 0; i < n * m; i++) {
  if (i > 0 && i % n == 0) printf("\n");
  printf("%d\t", *(array + i));
}

free(array);

没有指针(可变大小的数组在C90上不起作用,需要更新的标准,或者您可以使用固定大小的数组):

int i, val, n, m;

printf("Put in array size in the form of n-m where n is number of rows and m is number of columns: ");
scanf("%d-%d", &n, &m);
int array[n][m];

i = 0;
while (i < n * m) {
  printf("Value for row: %d, column: %d: ", i / m + 1, i % m + 1);
  scanf("%d", &val);
  if (val > 99 || val < -99) continue;
  array[i / m][i % m] = val;
  i++;
}

for (i = 0; i < n * m; i++) {
  if (i > 0 && i % n == 0) printf("\n");
  printf("%d\t", array[i / m][i % m]);
}