Зацикливание при вводе символа
Писал функцию по заполнению матрицы с проверкой, что ввел не символ, а число:
int** setMatrix(int graph_size) {
/*Выделение памяти под матрицу смежности*/
int** matrix = (int**)malloc(graph_size * sizeof(int*));
for (int i = 0; i < graph_size; i++) {
matrix[i] = (int*)malloc(sizeof(int*) * graph_size);
}
/* Ввод матрицы смежности */
enterAgain:
printf("\nEnter matrix\n");
for (int i = 0; i < graph_size; i++) {
for (int j = 0; j < graph_size; j++) {
int temp;
//int rc = scanf("%d", &temp);
if (!scanf("%d", &temp)) {
fflush(stdin);
goto enterAgain;
}
else
{
matrix[i][j] = temp;
}
}
}
return matrix;
}
Однако, если я ввожу символ, то происходит зацикливание с выводом "Enter matrix". Не знаю в чем проблема. Подскажите пожалуйста
Ответы (1 шт):
Автор решения: Аркадий
→ Ссылка
При вводе не-числа в потоке ввода остаются данные после scanf(). Сначала надо от них избавиться:
int** setMatrix(int graph_size) {
char ch;
/* ... */
if (!scanf("%d", &temp)) {
fflush(stdin);
do {
ch = getchar();
} while ((ch != EOF) && (ch != '\n'));
goto enterAgain;
}
/* ... */
}