Помогите перевести char в int
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
В общем был недавно на олимпиаде. Нужно было чтоб все программы читали input.in и записывали результат в output.out. В input.in находится 5 чисел длиной до 2 символов (цифры типа integer). Считывается хорошо, все числа выводятся нормально :
Но вот если хочу вести с ними какие то вычисления выскакивают непонятные значения, к примеру 174648468. Потом понял что char нужно перевести int. Пытался так :
Норм руководства по itoa всяким не нашёл, да и судя по отзывам на форумах оно то особо и не помогает.
Как перевести эти char'ы в int ? Или я с самого начала неправильно считываю.
Кажется стоит избавиться от [2 ] в char n ? Написал на андрюше прогу и в диагностике пишет что квадратные скобки нужны только для string.
Я был прав...
Ahmasoft, можно посмотреть содержимое input.in? Твоё описание очень нечёткое ((
Я был не прав... Содержимое input.in (5 чисел и усе) : 11 2 3 21 25
Ahmasoft, прекрасный input.in! Читай как 5 переменных типа
int
и будет тебе щастье :))Кстати, двухсимвольная строка в C/C++ занимает три ячейки массива типа
char
. Это так, на будущее.наверно 3 символ это нуль-символ
чар и так «целочисленный», подсмотрел фишку на киберфоруме, парни чтоб откорректировать «вес» цифры, вычитают значение нуля по ASCII т.е. как бы обнуляют числовую прямую (в аски цифры не с начала представлены) и получается надо посимвольно с соблюдением разрядности цикл организовать.
Vangua,
char
— по определению целочисленный, в отличие от типов чисел с плавающей точкой. Ноchar
иint
— это разные типы. Как правило, они отличаются разрядностью.Для преобразования С-строки в
int
конечно можно написать собственную функцию, однако лучше воспользоваться стандартнойatoi()
(см. описание).atoi выручил. :-)
И ещё один вопрос, когда я сначала объявил int а :
Visual ругался, почему ?
Может из-за того что переменная b не была инициализирована, т.е. там был какой-то хлам, с которым atoi не работает, а в первом случае просто повезло и в области памяти b попалось корректное для atoi значение???
Ahmasoft, попроводил опыты с atoi(). Он ругается когда не указан размер массива char[], и неважно где int a.
Также ещё возник вопрос с чтением. К примеру в первой строке входного файла input.in числа : n m d.
Во второйвторой строке другие числа : k a b. Пробовал считывать методом описанным выше, но ругается. Как организовать считывание по строкам и пожалуйста немного поподробнее ( просто могу так сказать « не врубиться » ).
Ahmasoft, а так читать не судьба?
Так ведь кол-во переменных может меняться. Это я примерный input.in задал.
Ну и Cranium тебе примерный код написал ;-)
Считывать можно в цикле в одну переменную, или в элементы массива. Это как тебе нужно. Фишка в том, что используется не посимвольное и не строковое считывание из потока, а в переменную типа
int
. Т.е. вся головная боль по преобразованию из символов в целое переносится на стандартную библиотеку.