#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);