Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2012, 20:24   #1
neonakaneya
Пользователь
 
Регистрация: 02.01.2012
Сообщений: 19
По умолчанию Как преобразовать элемент массива типа char в int?

Тут столкнулся с проблемой, что при считывании строки из входного файла и записи этой строки в массив типа char, при попытке присвоить значение элемента массива к переменной типа int , я получаю не совсем то что нужно.
вот кусок программки
Код:
#include <iostream>
#include <fstream>
using namespace std;


void main()
{
	ifstream fin ("Input.txt");
	ofstream fout ("Output.txt");
	
	char First[6];

	int N;
	int A;
	int B;
	int C;
	int D;
 
	fin.getline(First,6);
	
        N=First[0];
        A=First[2];
	B=First[4];
	cout<< N;

	system("pause");

}
первая строка входного файла выглядит так:"3 4 8"
но в консоль выводиться почему-то не 3, а 51 , я догадываюсь что это из-за смены типа, но как его правильно поменять - не доходит ( или как считать из файла сразу в инт?)
и еще вопросик: как getline'ом считывать строки последовательно? я как не пробовал - постоянно первую строку читает , а вторую не хочет.

Последний раз редактировалось neonakaneya; 02.01.2012 в 20:29.
neonakaneya вне форума Ответить с цитированием
Старый 02.01.2012, 20:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что вы выводите код символа, а не значение записаное в него.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.01.2012, 20:36   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от neonakaneya Посмотреть сообщение
первая строка входного файла выглядит так:"3 4 8"
но в консоль выводиться почему-то не 3, а 51 , я догадываюсь что это из-за смены типа, но как его правильно поменять - не доходит ( или как считать из файла сразу в инт?)
Если от 51 отнять 48, то получится 3.
Если от (int) '0' отнять 48, то получится 0.
Если от (int) '3' отнять 48, то получится 3.
Если от (int) '4' отнять 48, то получится 4.
Если от (int) '9' отнять 48, то получится 9.

Цитата:
Сообщение от neonakaneya Посмотреть сообщение
и еще вопросик: как getline'ом считывать строки последовательно? я как не пробовал - постоянно первую строку читает , а вторую не хочет.
А как ты пробовал?
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 20:52   #4
neonakaneya
Пользователь
 
Регистрация: 02.01.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Если от 51 отнять 48, то получится 3.
Если от (int) '0' отнять 48, то получится 0.
Если от (int) '3' отнять 48, то получится 3.
Если от (int) '4' отнять 48, то получится 4.
Если от (int) '9' отнять 48, то получится 9.



А как ты пробовал?
спасибо, на счет char-int понял закономерность.
а на счет гетлайна - пробовал в цикле for , ибо по заданию нужно считать N следующих строк(ну и правильно их обработать , а у меня даже считать их не получается)
neonakaneya вне форума Ответить с цитированием
Старый 02.01.2012, 20:59   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от neonakaneya Посмотреть сообщение
спасибо, на счет char-int понял закономерность.
а на счет гетлайна - пробовал в цикле for , ибо по заданию нужно считать N следующих строк(ну и правильно их обработать , а у меня даже считать их не получается)
В цикле можно по разному пробовать. Но поскольку я не телепат, и понятия не имею, чего именно вы делали, а конкретный код вы не предоставили, то ничем помочь не могу.
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 21:06   #6
neonakaneya
Пользователь
 
Регистрация: 02.01.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
В цикле можно по разному пробовать. Но поскольку я не телепат, и понятия не имею, чего именно вы делали, а конкретный код вы не предоставили, то ничем помочь не могу.
Извиняюсь что сразу код не скинул , но все , проблема уже решена, оказывается я в условии цикла указал неверное значение, и поэтому на консоль ничего не выводилось(т.к. последняя строка во входном файле - 4ая, а в цикле считывалась 5ая пустая) , это меня и смутило
neonakaneya вне форума Ответить с цитированием
Старый 02.01.2012, 21:13   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от neonakaneya Посмотреть сообщение
Извиняюсь что сразу код не скинул , но все , проблема уже решена, оказывается я в условии цикла указал неверное значение, и поэтому на консоль ничего не выводилось(т.к. последняя строка во входном файле - 4ая, а в цикле считывалась 5ая пустая) , это меня и смутило
Анегдот такой есть: летит Шерлок Холмс и доктор Ватсон на воздушном шаре. Ну там, в бурю попали, заблудились. Думают: а где они находятся? Ну думают, щас спустимся к земле поближе, и спросим кого нибудь.

Опускаются, смотрят - человек. Пасет коров в поле.

Холмс кричит ему:

- мы гдее????

А мужик, подумал-подумал и кричит в ответ:

- на воздушном шаре!

Холмс поворачивается к Ватсону, и говорит:

- этот человек - программист. А мы - в России.
- но как вы догадались, Холмс?!

- элементарно, Ватсон! Во-первых, прежде чем ответить, этот человек подумал. Во-вторых, ответ его абсолютно точный. В третьих - такой же точный, как и бесполезный. А в-четвертых, только в России программисты пасут коров.


А теперь случай из реальной жизни: подходит студент к программисту, и спрашивает: "У меня что-то не работает! Почему это может быть?"
А программист ему отвечает: "наверное, что-то не правильно".

Как видишь, ответ программиста абсолютно точный. И такой же бесполезный.

Мораль: когда имеешь дело с программированием, будь конкретен. Какой вопрос - такой и ответ.
_Bers вне форума Ответить с цитированием
Старый 03.01.2012, 11:40   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

neonakaneya

при попытке присвоить значение элемента массива к переменной типа int , я получаю не совсем то что нужно.

потому что ты делаешь не совсем то что нужно.

ifstream fin(...);

std::string s;
std::getline(fis, s);

std::stringstream ss(s);

int a, b, c;
ss >> a >> b >> c;
Rififi вне форума Ответить с цитированием
Старый 03.01.2012, 14:13   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Если от 51 отнять 48, то получится 3.
Если от (int) '0' отнять 48, то получится 0.
Если от (int) '3' отнять 48, то получится 3.
Если от (int) '4' отнять 48, то получится 4.
Если от (int) '9' отнять 48, то получится 9.
Магия!
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 03.01.2012, 14:20   #10
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

эм.
char c=3;
int c1;
c1=c-'0';
//c1=3;

как то так оО
pinkiller вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение массива типа char. KuckaMAXHATKA Общие вопросы C/C++ 1 15.02.2011 18:07
Конверт int массива в char массив Raptor Помощь студентам 14 23.03.2010 00:50
Как перевести значение ячейки массива char в int в Си SASS Общие вопросы C/C++ 1 10.12.2009 14:44
почему элемент массива char* весит 4 байта? Познающий Помощь студентам 6 09.12.2009 21:06
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35