0

我以为我理解 C,但我很难写一个简单的加法代码来练习。当我运行这段代码时,int a 每次都是 0。但是, int b 工作正常。这里的想法是程序的输入是8 + 9。为什么sscanf不能识别变量a?

#include <stdio.h>
#include <stdlib.h>

int plus(int a, int b){
    return (a + b);
}

int main()
{
    int a, b;
    char input[100], op;

    printf("...I am ZOLO...\n");
    printf("...The most vercatile calculator known to man...\n");
    printf("...Please enter your query:");
    fgets(input, sizeof(input), stdin);
    sscanf(input, "%d %s %d", &a, &op, &b);

    printf("%d + %d = %d...", a, b, plus(a, b)); 

    return 0;
}
4

1 回答 1

1

Jonathon Reinhart 有正确的答案。在这种情况下,这不仅仅是未定义的行为问题,而是编译器设法在op之前分配a(以内部内存顺序)并且您的机器使用 little-endian 字节顺序,以便'\0'之后存储的字符op消除了之前的值以前存储到a.

于 2013-03-25T06:03:30.893 回答