задача длинных целых чисел
Вопрос
Я новичок в C и использую компилятор Turbo C++ (16 бит).
В софте, который я пишу, максимальный ответ в районе 32000.Если мне нужно число больше этого, я использую long int
.
Если я выполню следующую программу:
#include <stdio.h>
void main()
{
long int x;
x=40000;
printf("%d", x);
}
Затем я получаю сообщение об ошибке, что постоянное значение длинное в функции main()
.
Как я могу получить ответ больше 32000 и избавиться от этой ошибки?также теперь я меняю %d на %ld и использую 40000L, но когда я использую целое число без знака, тогда мне также нужно использовать 'l' с 40000//??
Решение
Используйте %ld в printf для длинного целого числа.%d предназначен для int, который в вашем компиляторе имеет только 16 бит.А для сообщения об ошибке используйте x=40000L.
Другие советы
Измените long на unsigned, 40000 поместится в unsigned int.
Предполагая, что вы используете Windows, лучшее решение — выбрать 32- или 64-битную платформу.16-битные программы не запускаются даже в 64-битных версиях Windows;вам действительно следует обновиться.
У Microsoft есть бесплатная версия Visual Studio: Экспресс-выпуск Visual C++.Это отличный вариант еще и потому, что он поставляется с полноценной IDE.
Gcc также доступен для Windows в виде Mingw.К сожалению, сама mingw не выпускает готовые компиляторы, но это делают другие, например уравнение.com или ТДМ.
Возможно, освежить в памяти вариативное форматирование может помочь :) К тому времени, когда вы (или подсистема printf()) действительно приступите к расширению вариативные аргументы, Предполагается, что вы знаете, какого они типа.
Это касается не только printf, но и любой другой функции, которая использует va_*() или v*printf() при обсуждении printf.Не теряйте свой тип.
Также следите за подписанность чтобы избежать неожиданных результатов.
Другими словами, к моменту вызова printf() или чего-либо еще, принимающего многоточие, будьте уверены в том, что вы передаете.Это не ограничивается printf(), более того, выход за его пределы часто не приводит к появлению предупреждений компилятора.