проверить, равно ли количество строк в матрице заданным строкам в c - PullRequest
0 голосов
/ 24 ноября 2018

Мне нужно проверить, совпадает ли количество строк в матрице с заданными.Пользователь вводит размер матрицы, а затем элементы матрицы.Вот мой код для ввода:

int **mat1, row, col;
scanf("%d %d", &row, &col);

mat1 = (int**) malloc (sizeof(int*) * row);
for(int i = 0; i < row; ++i){
    mat1[i] = (int*) malloc (sizeof(int) * col);
}

for(int i = 0; i < row; ++i) {
    for(int j = 0; j < col; ++j) {
        scanf("%d", &mat1[i][j]);
    }
    scanf("\n");
}

Я хочу проверить случай, когда пользователь хочет, например, 2 строки, но затем вводит только одну

2 3 // числостроки и столбцы

1 2 3 // вводит только одну строку

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 24 ноября 2018

Вы знаете, что произошла ошибка ввода, когда scanf() не возвращает количество спецификаторов преобразования в строке формата (= количество полей, которое предполагается прочитать).Поскольку вы всегда пытаетесь прочитать 1 целое число, проверьте, возвращает ли scanf() что-то отличное от 1:

int input_successful = 1;  // assume input is ok
for (int i = 0; i < row; ++i) {
    for (int j = 0; j < col; ++j) {
        if (scanf(" %d", &mat1[i][j]) != 1) {
            //     ^ this makes sure that the '\n' from last line is ignored
            input_successful = 0;  // remember input is flawed
            i = row;               // make sure the outer loop ends immediatly
            break;                 // break out of the inner loop
        }
    }
    // scanf("\n");   // unnecessary
}

if (!input_successful) {
    // handle error
}

// ...

// and free() the allocated memory when you are done using it!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...