Вообще то это программа на чистом C, хотя и на C++ тоже пойдет при исправлении ошибок- Но на C++ всё пишется проще:
#include <iostream>
using namespace std;
int main(){
char names[10][32];
for (auto &i:names){cout<<"Enter the name: "; cin.getline(i,32);}
for (auto &i:names)cout<<&i-names+1<<' '<<i<<endl;}
Проблема в вашем коде связана с некорректным обращением к элементам массива names. Ваш код пытается использовать i в качестве индекса, что приводит к непредсказуемым результатам и "белиберде" в выводе. Вам нужно скорректировать обращение к массиву names для получения ожидаемого результата. Используйте names для сохранения и вывода имен.
#include
int main() {
char names[10][32];
for (unsigned short i = 0; i < 10; i++) {
printf("Enter the name: ");
scanf("%s", names);
}
for (unsigned short i = 0; i < 10; i++) {
printf("Name #%d: %s\n", i + 1, names);
}
return 0;
}
Здесь я заменил i[names] на names, что позволяет корректно сохранять и выводить имена. Также я изменил формат вывода, чтобы было понятно, какому имени соответствует каждый порядковый номер.
Программа выводит ровно то, что ты ей сказал вывести.
Форматную спецификацию %i замени на %s, если ты хочешь выводить строку, а не её адрес в памяти. #include
int main()
{
char names[10][32];
for (unsigned short i = 0; i < 10; i++)
{
char name[32];
printf("Enter the name: ");
scanf("%s", i[names]);
}
for (unsigned short i = 0; i < 10; i++)
{
printf("Name n%i: %s\n", i, i[names]);
}
return 34;
}
Единственное изменение - в строке в теле последнего цикла.
И неплохо бы ограничить количество вводимых символов, иначе при вводе более 31 символа будет рандомно затираться память других переменных и служебных структур. Форматная спецификация scanf позволяет задать такое ограничение, см. документацию.