C, чтение простых строк формулы из ввода - PullRequest
1 голос
/ 18 ноября 2010

для домашней работы нам нужно ввести простые формулы (например, 3*2, 4+10, 50/16 и т. Д.) И вычислить результат (и остальные), используя только сложение, вычитание и сдвиг битов.В любом случае, я мог бы использовать три последовательных чтения ввода, однако я подумал, что попробую получить формулу за один проход, используя fgets() и sscanf().Вот что у меня есть:

int *v;  // value (left side)
int *m;  // modifier (right side)
char *o; // operant

int res = sscanf(buffer,"%d%s%d",v,o,m);

Но, естественно, это не работает, потому что o получает всю оставшуюся часть строки, оставляя m ни с чем (m равно любому значениюгде и когда это объявлено)

Теперь, каков будет правильный способ сделать это?

ПРИМЕЧАНИЕ : я использую функцию обрезки для обрезки лишних пробелов.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

Попробуйте %c вместо %s.Если оператор всегда является одним символом и между оператором и операндами нет пробелов, это должно работать.

Кстати, вы инициализируете v, m и o, чтобы фактически указывать на что-то?Было бы намного лучше сделать это:

int v;
int m
char o;

int res = sscanf(buffer, "%d%c%d", &v, &o, &m);

Как говорил мой профессор «Введение в программирование на C»: «C опасен. Практикуйте безопасный C!».

1 голос
/ 18 ноября 2010

Вы можете использовать %[-+*/] (с вашим набором операторов), чтобы строка оператора получала только символы оператора.

0 голосов
/ 18 ноября 2010

Поскольку у вас нет лишних пробелов и все операторы имеют длину в один символ, вы можете использовать %c для заполнения o.

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