Как вывести массив строк в Си?
Понимаю, что что — то не правильно делаю, но мне кажется второй кусок кода логичным :
printf(«%s/n», *a) ; //вывести строку.
Предполагаю, что при чтении строки она ни где не заканчивается, по этому ошибка. Хотя терминальный ноль вроде бы не явно должен ставиться в конце строки. Помогите узнать в чем ошибка.
- Вопрос задан более трёх лет назад
- 5456 просмотров
2 комментария
Простой 2 комментария
Вывод одномерного массива в C++
Программой задаётся одномерный массив, числа которого генерируются произвольно, нужно организовать его вывод с помощью cout. Но при таком выводе:
cout < < m[i]; //без пробелов
Вывод числе происходит без пробелов, т.е. сплошные цыфры
54216452122454235412
Как сделать такой вывод
54 21 64 52 12 24 54 23 54 12
printf - не подходит.
Отслеживать
51.3k 87 87 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
задан 9 янв 2012 в 12:22
11 1 1 золотой знак 2 2 серебряных знака 5 5 бронзовых знаков
6 ответов 6
Сортировка: Сброс на вариант по умолчанию
cout
Отслеживать
ответ дан 9 янв 2012 в 12:34
1,081 6 6 серебряных знаков 13 13 бронзовых знаков
Не успел это написать.
9 янв 2012 в 12:35
А зачем 2 пробела?
9 янв 2012 в 12:37
не знаю, чтобы мало не показалось 🙂
9 янв 2012 в 12:38
-зачем ты два раза jmp smth поставил?? -а вдруг первый не сработает.
10 янв 2012 в 14:42
cout
Почему? Нельзя им пользоваться или ты сам такой вывод сделал? А то можно так:
printf("%i ", m[i]);
Отслеживать
ответ дан 9 янв 2012 в 12:36
5,441 21 21 серебряный знак 32 32 бронзовых знака
через printf преподу не нарв) сказал типо мы такого учили,делай как учили)
9 янв 2012 в 12:38
спасибо всё работает
9 янв 2012 в 12:41
В реальном программировании форматированный вывод через printf() делать проще. Когда все преподу сдадите, сообщите ему об этом, пусть правильно учит.
9 янв 2012 в 14:30
Сишный printf не типобезопасен, поэтому правильно учит. Кстати, я изобрёл свой типобезопасный String::Format. Используется так: int iv=123; double pi=3.1415926; String str=String::Format("iv=; pi=")(iv)(pi); Такое вот форматирование строк при помощи смайликов.^>
10 янв 2012 в 11:50
Программист С++ должен знать и printf, и scanf, поскольку они реально применяются и масса кода написана с ними. А по поводу типобезопасности,так на этот случай прогеру и голова дана, чтобы ошибки не допускать. Кроме того, компиляторы сразу выдают предупреждения при несоответствии типов.
10 янв 2012 в 12:05
#include #include #include using namespace std; . copy(m, m + sizeof(m)/sizeof(m[0]), ostream_iterator(cout, " ")); cout
Отслеживать
ответ дан 9 янв 2012 в 19:12
929 7 7 серебряных знаков 8 8 бронзовых знаков
Не для новичков конечно, но поставлю '+'. m + sizeof(m)/sizeof(m[0]) Если не ошибаюсь, это можно заменить на end(m).
11 янв 2012 в 15:16
endl не рекомендуется использовать, лучше - и быстрее - "\n". endl , как бы это сказать, флашит буферы аутпута
2 июл 2016 в 21:14
#include
далее при выводе массива:
cout
Функция setw делает пробелы между элементами на количество единиц, указанных в скобках.
Отслеживать
207k 28 28 золотых знаков 294 294 серебряных знака 526 526 бронзовых знаков
ответ дан 2 июл 2016 в 20:42
21 1 1 бронзовый знак
setw задает ширину поля вывода (данные + заполнитель), а не 'делает пробелы'. Заполнитель задается через setfill. И задавать ширину все же стоит ПЕРЕД выводом данных, а не после.
2 июл 2016 в 21:31
cout
Отслеживать
ответ дан 9 янв 2012 в 12:42
7,313 16 16 серебряных знаков 14 14 бронзовых знаков
#include usin namespace std; int main() < int a[1024]; for(int i=0; i
Отслеживать
ответ дан 10 янв 2012 в 14:44
1,823 5 5 золотых знаков 28 28 серебряных знаков 40 40 бронзовых знаков
Зачем отвечать, если такой ответ уже есть? Тем более, что у тебя ошибка - выход за пределы массива. Так как отсчёт идёт с нуля, послений элемент - 1023, а ты включаешь 1024 в цикл.
10 янв 2012 в 15:26
я не нашел полного ответа. тем более, что ошибка не фатальна и её можно исправить даже, если ты начинающий
10 янв 2012 в 19:11
насчет нефатальной ошибки, это вы зря. подобный выход за пределы массива может привести к повреждению данных, к нарушению безопасности и просто к аварийной выгрузке пограммы.
10 янв 2012 в 20:34
> и просто к аварийной выгрузке пограммы. Вряд ли. На стеке, по-моему, ошибки переполнения буфера не проверяются, поэтому вылет бует только при использовании программой повреждённых данных. >я не нашел полного ответа. Заполнить массив он и сам смог, раз задал вопрос по его выводу. Цикл он тоже объявил судя по тому, что показал результат вывода своей программы без пробелов. >её можно исправить даже, если ты начинающий Когда я был начинающим, я натыкался на такие ошибки. Компилятор о них не сообщает. Только в Visual Studio можно включить анализ кода, при котором он напишет об этой ошибке
11 янв 2012 в 15:13
Возьмем эльфа. Положим, функция main. Первая переменная, что в ней декларируется, это массив. В ходе выполнения программы выделяется место в стеке с помощью изменения содержимого регистра esp. Положим, мы переполнили массив при заполнении. Что лежит за массивом перед доступным функции стеком? char ** argv. Если мы его нарушим, то при попытке прочитать параметры вызова процесса, наступит segmentation fault. Это лишь один из сценариев.
Ввод и вывод массива
Ввод и вывод массива, то есть заполнение массива пользователем программы и выдачу содержимого массива пользователю, можно делать по-разному. Рассмотрим далее два варианта ввода/вывода массива в консольном приложении - scanf/printf и cin/cout.
Ввод/вывод массива с помощью функций scanf и prntif
Функция scanf предназначается для ввода данных с клавиатуры.
Для применения данной функции следует сначала подключить библиотеку языка C для операций ввода и вывода. Выглядит это следующим образом:
Как вывести весь массив c
Друзья, подскажите. Нужно занести в массив mas x символов, а потом вывести этот массив.
#include #include int main()
Выводит **********@. то есть массив и за ним еще несколько лишних символов. в чем может быть проблема?
The First Person!
Форумчанин
Регистрация: 07.08.2007
Сообщений: 228
Вот в чем проблема! Поставь mas[x]='\0';
К тому же у тебя помимо этого много ошибок.
%s используется для вывода строки! Для вывода символа, ну и для ввода символа используется %c
Ну я так понял тебе весь массив надо заполнить символом '*'
И наконец для вывода всего массива используй puts(mas);
#include #include int main() < int i; char mas[10], g='*'; for(i=0;i<10;i=i+1)< mas[i]=g; >mas[10]='\0'; puts(mas); getch(); >
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
Последний раз редактировалось MAKEDON; 15.04.2009 в 19:13 .