ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

16.04.2010, 00:30
|
|
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме: 188597
Репутация:
15
|
|
Сообщение от gold-goblin
Вопрос: почему переменной типа int можно присвоить чаровское (буквенное значение) и операция выполнится? почему не произойдет ошибки?
Потому что тип int по размеру больше чем char.
|
|
|

16.04.2010, 00:42
|
|
Участник форума
Регистрация: 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..
|
|
|

16.04.2010, 00:33
|
|
Познавший АНТИЧАТ
Регистрация: 26.03.2007
Сообщений: 1,095
Провел на форуме: 5265510
Репутация:
455
|
|
Потому что тип int по размеру больше чем char.
Где про это можно почитать подробней?
|
|
|

16.04.2010, 00:46
|
|
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме: 3516666
Репутация:
439
|
|
Сообщение от gold-goblin
Где про это можно почитать подробней?
_http://www.languagec.info/preobr_tipov.php
_http://www.cppnet.ru/c/tipdan.html
|
|
|

16.04.2010, 00:47
|
|
Познающий
Регистрация: 22.02.2010
Сообщений: 30
Провел на форуме: 188597
Репутация:
15
|
|
Сообщение от gold-goblin
Где про это можно почитать подробней?
Например, С.Прата - Язык программирования C++.Лекции и упражнения
см. 3ю главу
|
|
|

16.04.2010, 00:48
|
|
Познавший АНТИЧАТ
Регистрация: 26.03.2007
Сообщений: 1,095
Провел на форуме: 5265510
Репутация:
455
|
|
В данном случае ASCI код символа 'a' равен 97.
что-то не сходится... если сразу ввести первое значение аски символом то программа не предлагает ввести 2 число а просто выводит ответ не соответствующий номерам аски.
|
|
|

16.04.2010, 01:02
|
|
Участник форума
Регистрация: 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..
|
|
|

16.04.2010, 17:57
|
|
Познавший АНТИЧАТ
Регистрация: 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 в таком случае приравнивается к отрицательному числу.
|
|
|

17.04.2010, 02:05
|
|
Познающий
Регистрация: 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 при неправильном вводе получается из-за того, что локальные переменные при создании не обнуляются.
|
|
|

16.04.2010, 13:58
|
|
Новичок
Регистрация: 14.02.2010
Сообщений: 2
Провел на форуме: 238326
Репутация:
0
|
|
Здраствуйте Товарищи!
Объясните такую вещь.. Почему переменной (float) нельзя присвоить результат деления двух int переменных (например 5 и 7), чтобы результат получился дробный? Как выход, приходиться менять тип какой-нибудь одной или обеих int переменных на float. Другими словами, если для такой операции нужны float переменные, то почему нет какой-то строгости чтобы, например, обе переменные были типа float?
ПС. Использую VC++ 6.0
Последний раз редактировалось Neith; 16.04.2010 в 14:04..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|