Простой C: почему этот код scanf не работает?

#c

#c

Вопрос:

Возможно ли объединение печати и сканирования в C? Я пытаюсь запустить этот код, и он не запрашивает никаких входных данных, а просто вводит какое-то мусорное значение.

 #include <stdio.h>
int main()
{
    int a, b, c;
    scanf("Enter first number: %d", amp;a );

    scanf ("Enter the second number: %d", amp;b);
    scanf("Enter the third number: %d", amp;c);

    printf("%d == %d is %d n", a, b, a == b);
    printf("%d == %d is %d n", a, c, a == c);

    printf("%d > %d is %d n", a, b, a > b);
    printf("%d > %d is %d n", a, c, a > c);

    printf("%d < %d is %d n", a, b, a < b);
    printf("%d < %d is %d n", a, c, a < c);

    printf("%d != %d is %d n", a, b, a != b);
    printf("%d != %d is %d n", a, c, a != c);

    printf("%d >= %d is %d n", a, b, a >= b);
    printf("%d >= %d is %d n", a, c, a >= c);

    printf("%d <= %d is %d n", a, b, a <= b);
    printf("%d <= %d is %d n", a, c, a <= c);

    return 0;
}
  

Комментарии:

1. Текст в строке формата scanf требует, чтобы ввод соответствовал этому тексту. Страница руководства для scanf объясняет: man7.org/linux/man-pages/man3/scanf.3.html

2. Единственный способ объединить печать и сканирование на C — это написать функцию, которая вызывает printf , а затем вызывает scanf . И если вы хотите, чтобы вызов функции выглядел точно так, как вы написали, вам нужно разделить строку запроса на пробел после двоеточия. Затем передайте первую часть printf и вторую часть scanf .

Ответ №1:

Строка (строка формата), которую вы передаете scanf , не является чем-то, что будет напечатано. Это входные данные, которые он ищет.

Поэтому, когда вы делаете:

 scanf("Enter first number: %d", amp;a );
  

он ищет ввод типа «Введите первое число: 42», Если вы просто введете число типа «42» scanf , оно ничему не будет соответствовать, поэтому значение не будет присвоено a .

Вы, вероятно, хотите:

 printf("Enter first number: ");
if (scanf("%d", amp;a ) != 1) 
{
    // error - the input did not match an int
    exit(1);
}
// now a contains the scanned number
printf("The scanned value is %dn", a);