Предполагая, что входными данными являются:
6 4
0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0 1
0 1 1 1 1 0
6 и 4 - ширина и высота соответственно. Я использовал:
scanf("%d %d", &width, &height);
Затем я помещаю остальные входные данные в 2D-массив (доска [высота] [ширина]), используя циклы for. Проблема заключается в проверке ширины и высоты.
Когда я ввожу
6 4
0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0
0 1 1 1 1 0
один ввод пропущен, но он ждет, пока не будет введено еще одно число. Как я могу справиться с этим и заставить возникать ошибку, если вводится нехватка или слишком много входных данных?
Может ли кто-нибудь помочь мне с этой проблемой? Спасибо!!
Ваш вопрос, чтобы проверить правильность введенных значений ширины и высоты после создания всей доски? Вы можете сохранить счетчик, вставляя значения в board, и проверять, совпадает ли он с width * height. Однако это было бы наивной проверкой
Я знаю if (scanf ("% d% d", & width, & height)! = 2) {}, но 6 4 0 1 2 2 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 также печатает вывод ... Есть ли способ разделить ширину и высоту и остальные входные данные, нажав клавишу ввода?
Например, я ввожу 6 4 и нажимаю ввод, а затем остальные вводы, иначе должна возникнуть ошибка. Таким образом, 6 4 0 1 2 2 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 должна произойти ошибка, поскольку даже я не нажимаю ввод после 6 и 4, он печатает вывод.
Семейство функций scanf() не заботится о новых строках; они просто пустое пространство, которое нужно использовать. Если вам важны строки, читайте с помощью fgets() и анализируйте с помощью sscanf(). Обратите внимание, что весь набор данных может находиться в одной строке, если между числами есть пробелы, или каждое число может находиться в отдельной строке с произвольным количеством пустых строк между последовательными числами. Вы не заметите разницы с scanf().
fgets (буфер, sizeof (буфер), stdin); sscanf (буфер, "% d% d", & ширина, & высота); как это...?
Это ошибка, если одно значение отсутствует, но должны ли входные данные быть строками height, или может вся последовательность, например, находиться в одной строке? Это влияет на то, какие проверки вам нужно делать.
Я думаю, что ввод, который я написал, 6 и 4 нужно отделить от остальных входов ...





Для этого вы можете использовать gets, strtok и atoi.
Ниже приведен полный рабочий код. См. Работу здесь:
#include <stdio.h>
#include <string.h>
int main(void) {
int w, h, i, j;
char buffer[100];
scanf("%d %d", &w, &h);
int num[w][h];
gets(buffer);
for(i=0; i<h; i++)
{
gets(buffer);
char *token = strtok(buffer, " ");
for(j =w; j && token; j--)
{
num[i][w-j] = atoi(token);
token = strtok(NULL, " ");
}
if (j)
{
//Do what you wish to do on error
printf("\nError!!! %d inputs are missing\n", j);
}
}
for(int i=0; i<h; i++)
{
for(int j =0; j<w; j++)
printf("%d ", num[i][j]);
printf("\n");
}
return 0;
}
scanfвозвращает значение. Для начала проверьте это.