используя scanf в C / C ++ - PullRequest
14 голосов
/ 18 мая 2010

Для чтения int с помощью scanf мы используем:

scanf("%d",&i);

Что если i это long, а не int ??

Примечание: при использовании %d с long это дает мне раздражающее предупреждение ..

Спасибо!

Ответы [ 5 ]

24 голосов
/ 18 мая 2010

Просто используйте

long l;

scanf("%ld", &l);

это дает мне раздражающее предупреждение ..

Это предупреждение совершенно верно. Это просит о повреждении стека.

6 голосов
/ 18 мая 2010

Ради бога:

long n;
scanf( "%ld", & n );
3 голосов
/ 18 мая 2010

Каждый спецификатор преобразования ожидает, что его соответствующий аргумент будет определенного типа; если тип аргумента не соответствует ожидаемому типу, то поведение не определено. Если вы хотите читать длинную строку с scanf(), вам нужно использовать спецификатор преобразования %ld:

long i;
scanf("%ld", &i);

Проверьте в режиме онлайн черновой стандарт C (файл .pdf), раздел 7.19.6.2, пункт 11, чтобы получить полный список модификаторов размера и ожидаемых типов.

3 голосов
/ 18 мая 2010
scanf("%ld", &i);

Вы также можете использовать "%Ld" для long long (и, в зависимости от вашего компилятора, иногда также "%lld").

Подробнее смотрите в разделе «Конверсии» справочной страницы scanf. (Просто Google, если ваша система не имеет man-страниц).

0 голосов
/ 20 июня 2011

Проверьте это, вот ответ: "% I64d"

...