2014-08-17 4 views
1

Эй У меня проблемы с изучением массивов на C++.Печать массива показывает символы вместо символов C++

Программа, которую я должен разработать, представляет собой простой массив, который читает имя (в символе) и печатает его после ввода.

Моя программа считывает его, но выводит его в символы, а не в символы? Может кто-нибудь объяснить мне, что я делаю неправильно?

Char name[10]; 
cout <<"Give a name: "; 
cin >> name[10]; 
cout << endl; 

for (int i=0; i<strlen(name);i++) 
{ 
cout << name[i]; 
} 

Может ли кто-нибудь объяснить, где в моем коде оно идет не так, и помещает его в символы, а не нормальные персонажи, которые я дал?

+0

Вы фактически передаете массив или, скорее, указатель на функцию cin. cin ожидает строку, int или float тип переменной, а не массив. когда вы передаете имя [10] в cin, оно интерпретирует имя массива [10] как имя [0]. Таким образом, вы фактически передаете символ с индексом [0], а не весь массив. Почему бы не использовать строку и не забыть о цикле for. – Juniar

+0

@Juniar: Чепуха, в основном. Он пропускает один символ, а не весь массив. И компилятор не интерпретирует 'name [10]' как 'name [0]'. –

ответ

7

Это

cin >> name[10]; 

читает только один символ в name[10]. Начало массива остается неинициализированным, оно содержит мусор, который вы видите как «символы». И name[10] действительно находится за пределами вашего массива.

Чтобы прочитать строку C-стиля в char массив, вы должны сделать

cin >> name; 

Но вы бы гораздо лучше не использовать сырые массивы для хранения строк, особенно когда приходится иметь дело с пользователем ввод непредсказуемой длины. Вместо этого научитесь использовать std::string.

+0

Ничего себе, как просто было, спасибо большое. Но я не понимаю принципа этого. Если я объявляю массив, не должен ли я помещать символ, который я вставляю в IN, этот массив? Не могли бы вы дать мне больше информации об этом, пожалуйста? –

+0

Вы сказали компилятору прочитать в слот № 11 массива (помните, что массивы основаны на нуле, поэтому 10 - это 11-й слот). Тип 11-го слота - 'char'. Таким образом, компилятор использовал функцию для чтения в ** отдельном символе **, что и было сказано вам. AndreyT показывает вам, как читать в массиве символов. –

+0

Большое спасибо Томасу за ваш ответ. Я думаю, что, наконец, понял! Я уже рассмотрел метод использования строк, и это намного проще, слишком плохо, мой учитель еще не позволяет это сделать :). –

0

Поскольку вы используете C++, просто используйте std::string.

std::string name; 
cout << "Give a name: "; 
cin >> name; 
cout << name; 
+0

Большое спасибо за ваш ответ, но мы не изучаем главу строк до ориентированного на объекты программирования в C++, поэтому я использовал символы. Однако я все еще не понимал, почему мой/cin/не работает, а мой код/​​couts/в символах. Я бы очень хотел полностью понять эту главу. –

Смежные вопросы