Чтение длинного целого с помощью scanf

Читать int с помощью scanf мы используем:

scanf("%d", &i);

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

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

15
задан Antti Haapala 31 July 2019 в 11:11
поделиться

4 ответа

Просто использую

long l;

scanf("%ld", &l);

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

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

25
ответ дан 1 December 2019 в 01:23
поделиться

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

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

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

3
ответ дан 1 December 2019 в 01:23
поделиться
scanf("%ld", &i);

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

Посмотрите раздел "Преобразования" на man-странице scanf, чтобы узнать больше. (Если в вашей системе нет man-страниц, просто зайдите в Google).

3
ответ дан 1 December 2019 в 01:23
поделиться

Ради бога:

long n;
scanf( "%ld", & n );
6
ответ дан 1 December 2019 в 01:23
поделиться