HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 16.04.2010, 00:30
fluffylion
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме:
188597

Репутация: 15
По умолчанию

Цитата:
Сообщение от gold-goblin  
Вопрос: почему переменной типа int можно присвоить чаровское (буквенное значение) и операция выполнится? почему не произойдет ошибки?
Потому что тип int по размеру больше чем char.
 
Ответить с цитированием

  #2  
Старый 16.04.2010, 00:42
Ins3t
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме:
2083691

Репутация: 330
По умолчанию

Цитата:
Сообщение от gold-goblin  
Вопрос: почему переменной типа int можно присвоить чаровское (буквенное значение) и операция выполнится? почему не произойдет ошибки?
Ты присваиваешь типу int ASCI код символа:

Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using std::cout;
using std::endl;
//////////////////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
	{
	int var = 'a';
	cout << var << endl;
	return 0;
	}
//////////////////////////////////////////////////////////////////////////
В данном случае ASCI код символа 'a' равен 97.

Последний раз редактировалось Ins3t; 16.04.2010 в 00:45..
 
Ответить с цитированием

  #3  
Старый 16.04.2010, 00:33
gold-goblin
Познавший АНТИЧАТ
Регистрация: 26.03.2007
Сообщений: 1,095
Провел на форуме:
5265510

Репутация: 455


По умолчанию

Цитата:
Потому что тип int по размеру больше чем char.
Где про это можно почитать подробней?
 
Ответить с цитированием

  #4  
Старый 16.04.2010, 00:46
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

Цитата:
Сообщение от gold-goblin  
Где про это можно почитать подробней?
_http://www.languagec.info/preobr_tipov.php
_http://www.cppnet.ru/c/tipdan.html
 
Ответить с цитированием

  #5  
Старый 16.04.2010, 00:47
fluffylion
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме:
188597

Репутация: 15
По умолчанию

Цитата:
Сообщение от gold-goblin  
Где про это можно почитать подробней?
Например, С.Прата - Язык программирования C++.Лекции и упражнения

см. 3ю главу
 
Ответить с цитированием

  #6  
Старый 16.04.2010, 00:48
gold-goblin
Познавший АНТИЧАТ
Регистрация: 26.03.2007
Сообщений: 1,095
Провел на форуме:
5265510

Репутация: 455


По умолчанию

Цитата:
В данном случае ASCI код символа 'a' равен 97.
что-то не сходится... если сразу ввести первое значение аски символом то программа не предлагает ввести 2 число а просто выводит ответ не соответствующий номерам аски.
 
Ответить с цитированием

  #7  
Старый 16.04.2010, 01:02
Ins3t
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме:
2083691

Репутация: 330
По умолчанию

Не совсем понял.
Куда вводишь?

Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using std::cout;
//////////////////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
	{
	cout << static_cast<int>('c') << " = " << static_cast<char>(99);
	return 0;
	}
//////////////////////////////////////////////////////////////////////////
Все сходится.

---

UPD:
Или же, если ты хотел получить аски нескольких символов:

Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
//////////////////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
	{
	char var[256];
	cin.getline( var, 255 );

	for( int i = 0; i < strlen( var ); i++ )
		{
		cout << var[i] << " = " << static_cast<int>( var[i] ) 
			<< endl;
		}

	return 0;
	}
//////////////////////////////////////////////////////////////////////////

Последний раз редактировалось Ins3t; 16.04.2010 в 01:34..
 
Ответить с цитированием

  #8  
Старый 16.04.2010, 17:57
gold-goblin
Познавший АНТИЧАТ
Регистрация: 26.03.2007
Сообщений: 1,095
Провел на форуме:
5265510

Репутация: 455


По умолчанию

Цитата:
Сообщение от Ins3t  
Не совсем понял.
Куда вводишь?

Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using std::cout;
//////////////////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
	{
	cout << static_cast<int>('c') << " = " << static_cast<char>(99);
	return 0;
	}
//////////////////////////////////////////////////////////////////////////
Все сходится.

---

UPD:
Или же, если ты хотел получить аски нескольких символов:

Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
//////////////////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
	{
	char var[256];
	cin.getline( var, 255 );

	for( int i = 0; i < strlen( var ); i++ )
		{
		cout << var[i] << " = " << static_cast<int>( var[i] ) 
			<< endl;
		}

	return 0;
	}
//////////////////////////////////////////////////////////////////////////
Есть такой код
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	int integer1, integer2, sum;
	cout << "введите первое число \n";
	cin >> integer1;
	cout << "Введите второе число \n";
	cin >> integer2;
	sum = integer1 + integer2;
	cout <<"Сумма равна" << sum <<endl;
	return 0;
}
Если integer1 приравнять (ввести) аски символ то вы полняются все строки кода кроме cin >> integer2;/
Sum в таком случае приравнивается к отрицательному числу.
 
Ответить с цитированием

  #9  
Старый 17.04.2010, 02:05
fluffylion
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме:
188597

Репутация: 15
По умолчанию

Цитата:
Сообщение от gold-goblin  
Есть такой код
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
	int integer1, integer2, sum;
	cout << "введите первое число \n";
	cin >> integer1;
	cout << "Введите второе число \n";
	cin >> integer2;
	sum = integer1 + integer2;
	cout <<"Сумма равна" << sum <<endl;
	return 0;
}
Если integer1 приравнять (ввести) аски символ то вы полняются все строки кода кроме cin >> integer2;/
Sum в таком случае приравнивается к отрицательному числу.
В данном случае cin >> будет безошибочно считывать только цифровые символы, т.к. значение переменной, куда будет записан результат имеет тип int. Если же ввести например 123a, то integer1 будет равен 123, символ 'a' не учтется. При этом также будет установлен бит ошибки (failbit) и следовательно выражение cin >> integer2; не выполнится, так как установлен один из битов состояния потока (cin). Отрицательное или некорректное значение в sum при неправильном вводе получается из-за того, что локальные переменные при создании не обнуляются.
 
Ответить с цитированием

  #10  
Старый 16.04.2010, 13:58
Neith
Новичок
Регистрация: 14.02.2010
Сообщений: 2
Провел на форуме:
238326

Репутация: 0
По умолчанию

Здраствуйте Товарищи!
Объясните такую вещь.. Почему переменной (float) нельзя присвоить результат деления двух int переменных (например 5 и 7), чтобы результат получился дробный? Как выход, приходиться менять тип какой-нибудь одной или обеих int переменных на float. Другими словами, если для такой операции нужны float переменные, то почему нет какой-то строгости чтобы, например, обе переменные были типа float?
ПС. Использую VC++ 6.0

Последний раз редактировалось Neith; 16.04.2010 в 14:04..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ