Как разобрать этот вход в C - PullRequest
0 голосов
/ 10 ноября 2009

Прямо сейчас я делаю назначение, но мне очень трудно анализировать пользовательский ввод в C. Вот вид ввода, который будет вводить пользователь.

INSERT Alice, 25 Norway Drive, Fitzerald, GA, 40204, 6000.60

Здесь INSERT - команда (для ввода в список ссылок)
Алиса это имя
25 Norway Drive - это адрес
Фицеральд это город
ГА это состояние
40204 - почтовый индекс
6000.60 это баланс

Как я могу использовать scanf или любой другой метод в C, чтобы правильно принять это как ввод? Самая большая проблема, стоящая передо мной, заключается в том, как игнорировать эти "," и хранить эти значения в отдельных переменных соответствующих типов данных.

Спасибо всем, я решил проблему, и вот решение:

   pch = strtok(NULL, ","); pch =
        substr(pch, 2, strlen(pch));  //substr is my custom funcition and i believe you can tell by its name what it is doing.
        strcpy(customer->streetAddress, pch);

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Быстрый простой метод:

Используйте fgets(), чтобы получить строку от пользователя;
и strtok() для его токенизации.

Редактировать
Прочитав ваш комментарий:

Используйте strtok() только с запятой, а затем удалите конечные и начальные пробелы из результата.

Edit2
После пробного запуска я заметил, что вы получите INSERT Alice в качестве первого токена. Итак, после того, как все токены были извлечены , снова запустите strtok(), на этот раз с пробелом на первом извлеченном токене. Или найдите пробел и каким-то образом определите команду и имя оттуда.

1 голос
/ 10 ноября 2009

Если ваш формат входных данных фиксирован, вы можете использовать что-то быстрое и грязное, используя [s] scanf ().

С вводом:

INSERT Alice, 25 Norway Drive, Fitzerald, GA, 40204, 6000.60

Вы можете попробовать, если читаете со стандартного ввода:

char name[80], addr[80], city[80], state[80];
int zip;
double amt;

int res = scanf("INSERT %[^,], %[^,], %[^,], %[^,], %d, %f\n",
    &name, &addr, &city, &state, &zip, &amt);

Должно возвращать количество подходящих элементов (т. Е. 6).

0 голосов
/ 10 ноября 2009

scanf() может быть немного сложнее в этой ситуации, если предположить, что могут использоваться разные команды с разными параметрами. Возможно, я бы сначала использовал fgets() для чтения в строке, а затем strtok() для чтения первого токена (команды). В этот момент вы можете либо продолжать использовать strtok() с "," в качестве разделителя для чтения остальных токенов в строке, либо вы можете использовать sscanf() в оставшейся части строки (теперь, когда вы знаете формат, в котором будет находиться остальная часть ввода). sscanf() по-прежнему будет болезненным из-за того, что кажется, что в адресном и, возможно, городских полях допустимо неопределенное количество пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...