C/C++

Необработанное исключение в C++

Подскажите, в чем дело? Задание было таким: подготовить программу, в которой выполнить следующие объявления переменных:
1. Переменные c и a символьного типа. Присвоить переменной «с» в качестве начального
значения символ «?», а переменной «a» число 135.
5
2. Переменные i, j и k целого типа. Присвоить переменной «k» начальное значение 100, а
переменным «i» и «j», положительное и отрицательное значения, выходящие за диапазон
значений данного типа.
3. Переменные s1, s2, s3 описать как короткие целые со знаком. Присвоить этим
переменным соответственно 0, минимально целое и максимальное целое.
4. Переменные u и v описать как целые без знака и присвоить им соответственно
одинаковые по модулю положительное и отрицательное значения.
5. Переменные f и pi описать как вещественные одинарной точности. Присвоить
переменной pi в качестве начального значения число π с точностью 7 значащих цифр, а
переменной f значение, выходящее за диапазон допустимых значений.
6. Переменную d описать как вещественную двойной точности с начальным значением 10-
7. Напечатать значения всех переменных.

При запуске программы происходит данная ошибка.
char a; // a у вас объявлена как символ
a = '135'; // попытка записать три символа вместо одного приводит к ошибке
Не совсем понятно, как у вас это вообще компилировалось?! Возможно, у вас запускается предыдущая валидная версия алгоритма...

Тип int имеет предельно допустимое положительное целое равное 2147483647. Если присвоить переменной int положительное значение, которое превышает установленный предел, случиться переполнение значения и дальнейшее поведение алгоритма станет неопределённым. То же самое можно сказать и про отрицательный диапазон допустимых значений, где минимально допустимым значением является -2147483648. У вас в i и j такое переполнение предопределено!!

Вы пишите код на C++, а используете синтаксис языка С

Рекомендую переписать...

#include <iostream>
#include <climits>
#include <iomanip>
using namespace std;
int main() {
char c = '?';
cout << "c: " << c << '\n';
const char* a = "135";
cout << "a: " << a << '\n';
int k = 100;
cout << "k: " << k << '\n';
int i = INT_MAX + k;
cout << "i: " << i << '\n';
int j = INT_MIN - k;
cout << "j: " << j << '\n';
short s1 = 0;
cout << "s1: " << s1 << '\n';
short s2 = SHRT_MIN;
cout << "s2: " << s2 << '\n';
short s3 = SHRT_MAX;
cout << "s3: " << s3 << '\n';
unsigned u = 128;
cout << "u: " << u << '\n';
unsigned v = -128;
cout << "v: " << v << '\n';
float pi = 3.1415927;
cout << "pi: " << pi << '\n';
float f = FLT_MAX * 2;
cout << "f: " << f << '\n';
double d = 1e-5;
cout << "d: " << d << '\n';
system("pause > nul");
}
Юра Доманов
Юра Доманов
83 140
Лучший ответ
Роман Петенев Николай, что с Вами?

✓ RE:    переменной «a» число 135.

«Число» означает числовое значение, тип char это позволяет (а может быть лучше объявить переменную «a» типа unsigned char).
По смыслу задания: char a = 135;
А если компилятор будет недоволен, выполнить приведение типа.
Навскидку вижу попытку вывода символа как строк.
Андрей !!!
Андрей !!!
30 155
   Андрей, посмотрите в текст задания внимательно! Разве не очевидно, что символьной переменной «а» следует присвоить числовое значение 135?

     135 < 256

   Полагаю, лучше представить так: unsigned char a = 135;

   Если у Вас слишком строгий компилятор, то его можно удовлетворить, например, так:

unsigned char a = (unsigned char)135;
Студент Учусь В Астрахане А если Вы не лишены природного любопытства, то попробуйте ввести следующее:

char a;
try { a = 135; }

* А после этого проверьте, какое значение окажется в переменной «а».
Студент Учусь В Астрахане Андрей, если на Вашем компьютере установлена кодировка Windows-1251 (то есть Кириллица Windows), то скорее всего в переменной «а» должен оказаться символ двойного христианского креста.
Студент Учусь В Астрахане * Да, конечно, в C++ проще записать char a(135);