0

Cは理解できたと思いましたが、練習用の簡単な足し算コードを書くのに苦労しています。このコードを実行すると、intaは毎回0になります。ただし、intbは正常に機能します。ここでの考え方は、プログラムへの入力が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

JonathonReinhartが正解です。この場合、これは未定義動作の問題だけでなく、コンパイラがop直前にa(内部メモリ順序で)割り当てることができ、マシンがリトルエンディアンのバイト順序を使用するため、'\0'後に格納された文字opが元の値を消去するという事実です。以前にに保存されましたa

于 2013-03-25T06:03:30.893 に答える