Как вывести весь массив c
Перейти к содержимому

Как вывести весь массив c

  • автор:

Как вывести массив строк в Си?

Понимаю, что что — то не правильно делаю, но мне кажется второй кусок кода логичным :

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 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *