char input1;
std::cout << "input1 : ";
std::cin >> input1;
int input2;
std::cout << "input2 : ";
std::cin >> input2;
std::cout << input1 << std::endl;
std::cout << input2 << std::endl;
return 0;
Я написал «а» на входе 1 и «а» на входе 2.
Ouput is like this.
input1 : a
input2 : a
a
-858993460
Мне любопытно … Устав — 97 декабря. почему он печатает -858993460?
«а» не конвертируется в 97 автоматически? Зачем?
a
как строка не может быть преобразована в int
по правилам std::cin
следующим образом. Учти это: a
не является допустимым целым числом в базе 10. std::cin
не сможет конвертировать строка "a"
для int
,
Причина это печатает -858993460
потому что int
не инициализируется, поэтому может печатать что-либо или ничего, или делать все, что пожелает (поиск неопределенного поведения).
Попробуйте что-то вроде этого:
char input2_chr;
std::cin >> input2_chr;
int input2 = input2_chr;
Я думаю, что ввод просто не удалось, и значение, которое вы видите, является результатом неопределенного поведения (input2
никогда не было написано).
Если вы попытаетесь прочитать целое число, символ «а» недопустим, поэтому он не будет принят >>
оператор.
Вы, кажется, каким-то образом ожидаете, что входные данные должны преобразовать символ в код ASCII для этого символа, чтобы получить запрошенный вами результат целочисленного типа. Это рассуждение не поддерживается языком.
Во-первых, вы попросили ввести символ, поэтому вы получили первый
непробельный символ в потоке. Во втором вы попросили
введите целое число, чтобы поток пропускал пробелы (как это всегда происходит с
>>
) и попытался разобрать целое число. поскольку "a"
не может быть
начало целочисленного значения, поток устанавливает состояние ошибки (
failbit
) и вернулся, без модифицирующий input2
, Когда вы выводите
неинициализированная переменная, у вас есть неопределенное поведение. (Вам следует
никогда использовать введенную переменную без предварительной проверки, является ли
ввод выполнен успешно или нет.)
Из того, что вы описываете, звучит так, как будто вы пытаетесь ввести некоторые
двоичный формат Для этого вы должны открыть поток в двоичном режиме,
убедитесь, что он пропитан "C"
локаль, а затем использовать
istream::get
или же istream::read
, (Конечно, вы должны знать, что
двоичный формат, который вы читаете, чтобы иметь возможность
преобразовать неформатированные байты, которые вы прочитали, в фактическую информацию, которую вы
необходимость.)
Как например Аардвард уже ответил, вы видите произвольное исходное значение в стандарте C ++, называемое неопределенное значение, потому что операция ввода не удалась и input2
не было назначено новое значение.
Вывести десятичное представление значения char
переменная, просто конвертировать в int
для того, чтобы направить поток вывода для обработки как целое число.
Самый простой способ преобразовать его в int
это поощрить скрытое продвижение используя переменную в выражении, например, просто добавив +
знак перед ним:
#include <iostream>
using namespace std;
int main()
{
char const ch = 'a';
cout << "'" << ch << "' = " << +ch << endl;
}
Выход:
'а' = 97
Потому что вы читаете целое число в input2. a
не целое число Поэтому ничего не будет прочитано, а первоначальное значение input2
будет поддерживаться
В этом случае это будет какое-то случайное значение, причина input2
не инициализирован.
Вы можете проверить успешность чтения, проверив cin.good()