Одна из трудностей, связанных с использованием scanf()
напрямую (вместо, скажем, fgets()
и sscanf()
), заключается в том, чтобы выяснить, к чему это привело, когда оно пошло не так.
Вы также можете помочь себе, заметив, что scanf()
возвращает количество успешных конверсий. Вы должны тестировать:
if (scanf("%lfx+%lf=%lf", &a, &b, &c) != 3)
...something went wrong...
else
...more code using successfully read data...
То, что у вас есть, должно работать нормально, если данные верны и вы не столкнетесь с EOF. То есть звонок правильно сформирован; контекст, в котором это происходит, может быть не таким чистым.
Кроме того, поскольку вы хотите разрешить '+' или '-' между двумя терминами, вам действительно нужно перейти к механизму токенизации, который читает следующий токен (возможно, отрицательное число, 'x', a ' + 'или' - 'и другое (возможно, отрицательное) число). Затем вы можете интерпретировать это. Использование scanf()
- это катастрофа, если пользователь ввел «-2.3x-4.5 = 9.1», тогда, когда сканирование не удалось включить (в секунду) «-», у вас нет возможности вернуться назад и перечитать все данные с помощью отрицательный формат. Или вам нужно прочитать символ разделителя '+' или '-' в значение символа.