scanf. Работа с числами
Есть такой код:
int a, b;
scanf("%d/%d", &a, &b);
print("%d/%d", a, b);
Не могу понять, почему в случае ввода 10/5 я получаю на выходе как и положено 10/5, а в случае ввода 10.3/5 получаю 10/32766. Что происходит, когда scanf встречает число типа float, но спецификатор формата у меня указан %d? Разве он не должен "отсекать" всю часть после запятой и переходить к поиску другого спецификатора, который указан в строке scanf("%d%d", &a, &b);?
Ответы (2 шт):
Функция scanf возвращает количество значений, которое ей удалось считать scanf
#include <stdio.h>
int main()
{
int a, b;
int scanf_result = scanf("%d/%d", &a, &b);
printf("%d/%d\n", a, b);
printf("scanf result: %d\n", scanf_result);
}
Иными словами в случае если вы подаете 10.3/5, то scanf вернет 1, что значит, что правильно удалось считать лишь переменную 'a', а в других лежит мусор
В вашем примере вся загвоздка в символе '/' который стоит у вас между спецификаторами %d. Уберите его и всё будет происходить так как вы хотите. scanf абсолютно безразличен к пробельному символу и к их количеству ставите ли вы '\n' после каждого числа или в конце разделив числа пробелами, но '/' он ждёт именно там где вы его указали. Вместо этого он получает точку и дальше происходит то что сказали тут до меня другие участники. Это же относится и к любым другим символам. Как указываете в scanf точно так же должно быть и введено. Для убедительности можно поэкспериментировать со следующим кодом:
int x, y, z;
z=scanf(" %d.%d",&x,&y);
printf("%d.%d scanf=%d\n",x,y,z) ;