Почему эта программа отображает случайные символы? (C++)
Ну, не случайно, потому что каждый раз одно и то же, но
#include<iostream>
using namespace std;
int main()
{
char box[10][10];
for(int i=-1;i<11;i++)
{
cout<<"---------------------"<<endl<<"|";
for(int j=0;j<10;j++)
{
cout<<box[j][i]<<"|";
}
cout<<endl;
}
intx;cin>>x;
return 0;
}
выводит серию международных символов (ну, не все они "международные" как таковые, но я получаю такие вещи, как пи и испанский знак вопроса с перевернутыми буквами). В любом случае, я знаю, что это потому, что символы доступа к программе, которые не были инициализированы, но почему конкретные значения создают конкретные символы, каковы значения символов ASCII (если они имеют значения ASCII) и как я могу получить символы без сбоев моя программа?
5 ответов
Твой цикл закончился, я не имею смысла...
for(int i=-1;i<11;i++)
Это приведет к двум недопустимым индексам, -1 и 10, когда вы ссылаетесь здесь:
cout<<box[j][i]<<"|";
Это должно быть от 0 до < 10, как в другом цикле.
Кроме того, вы ничего не инициализировали содержимое коробки, поэтому вы печатаете неинициализированную память. Вы должны положить что-то в свою "коробку", прежде чем вы сможете что-нибудь вынуть.
Сами символы, вероятно, являются расширенными ASCII, вы можете получить их через любую расширенную таблицу ASCII. Этот появился первым в Google. Например, вы можете сделать:
cout << "My extended ascii character is: " << (char)162 << endl;
получить сумасшедший международный o.
По той же причине, что
#include <iostream>
using namespace std;
int main()
{
int x;
cout << x;
}
отображает случайное значение. Неинициализированные переменные (или массивы) содержат мусор.
для (int i=-1;i<11;i++)
Эта линия подозрительна. -1 до 10? Должно быть от 0 до 9.
Символы, отображаемые программой, зависят от:
- содержимое, которое оказывается в неинициализированных переменных, и
- локаль вашего компьютера или кодировка, используемая в презентации.
Ссылка на Unicode, вероятно, будет лучшим источником для определения кодов, необходимых для отображения определенных символов.
Учтите, что ваши пользователи могут не иметь одинаковую кодировку (или шрифты с правильными символами), выбранные по умолчанию. Вы должны либо проверить текущую локаль, либо принудительно указать одну конкретную для вашего вывода, чтобы убедиться, что ваш вывод отображается так, как вы хотите.
ASCII-код
(int)(box[j][i])
Вы просто печатаете обычные char
s, которые являются ASCII-символами с кодами от 0 до 255. При печати wchar_t
s та же память интерпретируется как другие символы.
Ваш цикл должен быть в [0; 10[не в [-1; 11[