У меня есть некоторый C-код, который принимает простые уравнения (без пробелов) в 6 различных форматах.
x + int = int
x - int = int
int + x = int
int - x = int
int + int = x
int - int = x
Я использую scanf для извлечения чисел вуравнения, которые работают для первых 4 случаев, но не для последних 2. И я понятия не имею, почему.
Например.Для первых двух форматов я использую это:
int digit1, digit2;
char operand;
if(scanf("x%c%d=%d", &operand, &digit1, &digit2) == 3) {
if(operand == '+') {
printf("x=%d", (digit2-digit1));
exit(0);
} else {
printf("x=%d", (digit2+digit1));
exit(0);
}
}
И это работает.
Для последних двух форматов я использую это (очень похоже)code:
int digit1, digit2;
char operand;
if(scanf("%d%c%d=x", &digit1, &operand, &digit2) == 3) {
if(operand == '+') {
printf("x=%d", (digit1+digit2));
exit(0);
} else {
printf("x=%d", (digit1-digit2));
exit(0);
}
}
И по какой-то причине это работает не так, как ожидалось.
Я пробовал разные вещи и обнаружил, что scanf () пропускает первую цифру и математический оператор.Это приводит к тому, что оператор if не является истинным, потому что теперь scanf () возвращает только 2, потому что он устанавливает цифру 1 во вторую цифру, операнд в знак '=' и затем не может найти больше цифр.
Мой вопроспочему scanf () не «видит» первую цифру.
Для этого примера введите
10+12=x
Текущее поведение:
digit1 = 12
operand = '='
digit2 = 0
Желаемое поведение:
digit1 = 10
operand = '+'
digit2 = 12