Scanf()在特定情况下表现奇特

时间:2018-09-26 16:46:38

标签: c scanf equality

我有一些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);
    }
}

这有效。

对于最后两种格式,我正在使用以下(非常相似)代码:

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,因为它将digit1设置为第二个数字,将操作数设置为'='符号,然后找不到更多数字。

我的问题是为什么scanf()没有“看到”第一位数字。

对于此示例输入

10+12=x

当前行为:

digit1 = 12
operand = '='
digit2 = 0

期望的行为:

digit1 = 10
operand = '+'
digit2 = 12

1 个答案:

答案 0 :(得分:0)

由于第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);
        }
    }
}