Scanf () ведет себя странно для конкретного случая - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть некоторый 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

1 Ответ

0 голосов
/ 26 сентября 2018

Мой код был поврежден из-за кода, который был у меня для 3-го и 4-го случая.

Я исправил его, объединив код для случаев 3 4 5 и 6.

if(scanf("%d%c", &digit1, &operator) == 2) {
    if(scanf("%d=x", &digit2) == 1) {
        if(operator == '+') {
            printf("x=%d", (digit1+digit2));
            exit(0);
        } else {
            printf("x=%d", (digit1-digit2));
            exit(0);
        }
    } else if(scanf("x=%d", &digit2) == 1) {
        if(operator == '+') {
            printf("x=%d", (digit2-digit1));
            exit(0);
        } else {
            printf("x=%d", (digit1-digit2));
            exit(0);
        }
    }
}
...