2015-02-22 2 views
0

Я пытаюсь написать простую программу, которая выводит символы ascii с 32 по 127, а когда я выполняю это, выводятся символы с 32 по 127 ... снова и снова, пока не сработает. Вот код:Переполнение вывода консоли

#include <iostream> 
using namespace std; 

int main() 
{ 
char letter = 32; 

for (letter = 32; letter <= 127; letter++) 
{ 
cout << letter << " "; 
} 

cout << endl; 
system("pause"); 
return 0; 
} 

который является своего рода странно, потому что, если я изменю «письмо» в переменную INT, она отлично работает.

+0

Вы можете объяснить, как он падает? – wimh

+0

ну, он просто продолжает выводить символы ascii с 37 по 127 на экран снова и снова, пока мне не будет предложено компьютер, чтобы закончить его –

+0

Я имею в виду 32, хотя 127 –

ответ

2

Возможно, ваш char подписан, поэтому он имеет диапазон значений -128 .. + 127. Как только он достигнет 127, и вы увеличиваете его, он становится -128, который все еще меньше 127, и цикл работает бесконечно. Используйте вместо этого int или unsigned char.

+1

Для таких вещей я бы использовал 'int'. Но, разумеется, это означает, что перед тем, как вывести его, вам нужно передать значение в 'char'. В противном случае он преобразует 'int' в текстовое представление его численного значения. –

0

char может иметь значение от -128..127, поэтому оно всегда будет <= 127.

1

char - это тип данных с 1 байт, который обычно составляет 8 бит. Так как вы не указали «знаковость» в char, компилятор мог бы предположить, а signed char, который колеблется в диапазоне от -128 до 127.

Этого цикл бежал навсегда, потому что увеличивающийся подписанную полукокс из 127 результатов -128 из-за overflow и -128 по-прежнему меньше или равно 127. Самый простой способ исправить это, используя большее целое число.

int letter = 32; 
for (letter = 32; letter <= 127 ; letter++) { 
    cout << static_cast<char>(letter) << " "; 
} 
Смежные вопросы