Вопрос:
код:
#include <iostream> #include <iomanip> using namespace std; class Ascii_output { public: void run() { print_ascii(); } private: void print_ascii() { int i, j; // i is used to print the first element of each row // j is used to print subsequent columns of a given row char ch; // ch stores the character which is to be printed cout << left; for (i = 32; i < 64; i++) { // 33 rows are printed out (64-32+1) ch = i; if (ch != ‘n’) // replaces any newline printouts with a blank character cout << setw(3) << i << » » << setw(6) << ch; else cout << setw(3) << i << » » << setw(6); for (j = 1; j < 7; j++) { // decides the amount of columns to be printed out, «j < 7″ dictates this ch += 32*j; // offsets the column by a multiple of 32 if (ch != ‘n’) // replaces any newline printouts with a blank character cout << setw(3) << i+(32*j) << » » << setw(6) << ch; else cout << setw(3) << i+(32*j) << » » << setw(6); } cout << endl; } } };
Выход:
Почему я не получаю правильно отступы вывода и странные символы со значениями 96 – 255?
Лучший ответ:
Эта строка не подходит:
ch += 32*j;
Вы хотите считать на 32, либо
ch += 32;
или
ch = i + 32*j;
Я настоятельно рекомендую сопоставить числовые и символьные значения во время вывода. Поэтому измените
cout << setw(3) << i+(32*j) << » » << setw(6) << ch;
к
cout << setw(3) << int(ch) << » » << setw(6) << ch; Ответ №1
Char выше 127 не являются частью стандарта od ASCII. Символы, отображаемые в Windows выше 127, зависят от выбранного шрифта.
http://msdn.microsoft.com/en-us/library/4z4t9ed1%28v=vs.71%29.aspx