2013-03-25 2 views
0

Я думал, что понял C, но мне трудно писать простой код для практики. Когда я запускаю этот код, int a равно 0 каждый раз. Однако int b отлично работает. Идея здесь в том, что вход в программу равен 8 + 9. Почему sscanf не распознает переменную a?Почему sscanf действует так?

#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

Обратите внимание, что '% s' - это строка, которую вы пишете на' op', которая является 'char'. Используйте '% c' для сканирования символа. –

+0

Хорошо работает для меня, во всяком случае. Что именно вы используете в качестве входных данных? – Rubens

+1

Что такое "vercatile"? –

ответ

1

У Джонатона Рейнхарта есть правильный ответ. В этом случае проблема не только в неопределенной поведении, но и в том, что компилятору удалось выделить op непосредственно перед a (во внутренней памяти), и ваш компьютер использует порядок байтов младшего порядка, так что символ , хранящийся после op, стирает значение, которое ранее было сохранено до a.

+0

Gracias, также спасибо, что поймал мою опечатку @Aniket. Я имел в виду универсальность. – zg303

Смежные вопросы