Вопрос Некорректно работает программа c++

Регистрация
12 Авг 2013
Сообщения
69
Репутация
-3
Спасибо
0
Монет
0
Приложение получает на вход 10 имён и затем их выводит с порядковыми номерами. В теории. На практике, почему-то, вместо имён выводится белиберда.



Код: 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%i\n", i, i[names]);

}



return 34;

}
 
#include
#include
#include
#include
using namespace std;
int main() {
array names;
for (auto& name : names) {
cout
 
Вообще то это программа на чистом C, хотя и на C++ тоже пойдет при исправлении ошибок- Но на C++ всё пишется проще:

#include &lt;iostream&gt;
using namespace std;
int main(){
char names[10][32];
for (auto &amp;i:names){cout&lt;&lt;&#34;Enter the name: &#34;; cin.getline(i,32);}
for (auto &amp;i:names)cout&lt;&lt;&amp;i-names+1&lt;&lt;&#39; &#39;&lt;&lt;i&lt;&lt;endl;}
 
Проблема в вашем коде связана с некорректным обращением к элементам массива names. Ваш код пытается использовать i в качестве индекса, что приводит к непредсказуемым результатам и &#34;белиберде&#34; в выводе. Вам нужно скорректировать обращение к массиву 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 позволяет задать такое ограничение, см. документацию.
 
Назад
Сверху