Это для домашней работы, поэтому я придерживаюсь требований, которые я описываю.Как использовать scanf для правильного анализа и фильтрации динамического ввода?
мне нужно обрабатывать ввод следующей общей форме:
XYZ A1 5
Первая часть (XYZ
) является командой, A1
является адресом (мне нужно только 1), и 5
является значение команда. Кроме того, мне нужно обрабатывать команды, которые не имеют ни адреса, ни значения (например, XYZ
) и команд, которые имеют только адрес, но не имеют значения (XYZ A1
).
мне удалось уткой-ленты это вместе, который, кажется обрабатывать все кашель довольно хорошо:
n = scanf("%c%c%c A%i %i",&c1,&c2,&c3,&a,&val);
Так что я могу использовать n
(сколько аргументов/переменных scanf
удалось соответствовать), чтобы выяснить, что вроде команды, а затем выполните некоторые основные проверки, чтобы получить то, что мне нужно. И это работает очень хорошо!
Но вот моя проблема: Существует также команда в формате XYZ A1 A2
- как в нем имеет два значения «адрес». Как мне получить scanf
, чтобы разобрать это? Еще раз, мне не нужен «A» для анализа.
Если я:
scanf("%c%c%c A%i A%i",&c1,&c2,&c3,&a,&val);
затем различные другие команды не будут работать, когда адрес и стоимость входа не имеют «А» перед ними.
P.S. Не разрешается использовать любую форму строк/массивов, следовательно, символы;
Что я могу здесь сделать?
Советую прочитать ввод с помощью 'fgets', а затем применить' sscanf'. Затем, когда присутствуют только, скажем, 2 из 3 полей, которые вы запрашиваете, легко игнорировать остальную часть строки и перейти к следующему. И сканируйте три строки *, прежде чем анализировать столько, сколько было введено.Используйте возвращаемое значение функции из 'sscanf'. –
Вы также можете использовать '% s' для последнего и проанализировать эту строку после (если она существует). Но это использование строки/массива, и это решение выше. В качестве альтернативы вы можете использовать '% c% i' для последнего и проверить, что такое первый символ. –
Guyssss, пожалуйста, прочитайте сообщение полностью - не допускается любая форма массива, включая строку. Хотя я проверю первое решение Weather Vane, это может быть правильно, потому что он по-прежнему использует какой-то сканер, спасибо! – Coma