2016-03-01 2 views
0

Мне очень сложно понять, почему это происходит. Когда я компилирую и запускаю свой код на терминале linux, функция scanf() работает хорошо в том смысле, что она принимает ввод, однако по какой-то причине он фактически не сохраняет это значение в назначенной переменной, вместо этого он делает это 1. Я просмотрел свой код и не вижу и не выдаю, но мне не хватает знаний в C, поэтому любая помощь приветствуется.C scanf() Функция Ошибка?

int main() { 

    int a, b, c, d, e, f; 
    printf("Please enter the value of a: "); 
    a = scanf("%d", &d); 
    printf("a = %d\n", a); 

    printf("Please enter the value of b: "); 
    b = scanf("%d", &e); 
    printf("b = %d\n", b); 

    printf("Please enter the value of c: "); 
    c = scanf("%d", &e); 

    printf("C = %d\n", c); 
    c = c + b; 
    printf("C = %d\n", c); 

    if (a > 1) { 
     printf("B = %d\n", b); 
     printf("C = %d\n", c); 
    } else { 
     printf("A is smaller or equal to 1 \n"); 
    } 

    if (b > 3 || c > 3) { 
     printf("A = %d\n", a); 
    } else { 
     printf("B is less than or equal to 3\n"); 
     printf("B = %d\n", b); 
     printf("C = %d\n", c); 
    } 
} 

справка приветствуется.

ответ

4

Я думаю, что путаница здесь обусловлена ​​тем, какая переменная хранит значение, отсканированное в, и то, что возвращается с scanf().

  • Второй аргумент, передаваемый scanf() это адрес, где отсканированное значение будет сохранено
  • Возвращаемое значение из scanf() это число значений отсканированы (или один из нескольких кодов ошибок)

с этим пониманием, еще раз взглянуть на этот код:

int a,b,c,d,e,f; 
printf("PLease enter the value of a: "); 
a = scanf("%d", &d); 
printf("a = %d\n",a); 

Третья линия сканирует значение и сохраняет его в VARI способный d (отсюда &d в конце звонка scanf()). Он также сохраняет значение значений, отсканированных, в переменную a. Затем он выдает a - который на данный момент равен 1, так как предыдущий scanf() вызывает только одно значение.

Лучшим шаблоном является сканирование в переменную, о которой вы просите (так, в данном случае, обходя &a до scanf()), а затем проверяя возвращаемое значение для любых ошибок, возникших перед продолжением в вашей программе.

+0

Итак, вы имеете в виду просто избавиться от & d так, чтобы код выглядел так: scanf ("% d", &a); printf ("a =% d \ n", a) ;? если так, то как это сделать избавиться от этой ошибки: example3.c: 6: 8: warning: игнорирование возвращаемого значения «scanf», объявленного с атрибутом warn_unused_result [-Wunused-result] scanf («% d», &a); Как это было у меня сделанное в первую очередь – MedicoreProgrammer

+0

Кроме того, спасибо за ваш вклад, я знаю, по крайней мере, знаю, почему значение всегда одно, поскольку я только вводю значение 1. – MedicoreProgrammer

+0

Это изменение будет работать, чтобы получить типизированное значение в переменной 'a'. предупреждает, что вы не проверяете, сколько значений сканируется, например, 'scanf()' может возвращать 0, если вы сканируете целое число, но введите «asdf». Вы можете сделать что-то вроде 'int scananned = scanf ("% d", &a); if (scanned <1) return -1; 'для выхода из программы раньше, если' scanf() 'не увенчался успехом. – Tim

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