Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2014, 16:30   #1
Shredzer
 
Регистрация: 24.07.2014
Сообщений: 5
По умолчанию Вопрос по вводу массива

Visual C++ 6.0:
Код:
#include <stdio.h>
void main(void){
	int mas[6];
	for(int i=0;i<=6;i++){
		printf("mas[%i]\n",i);
		scanf("%i",&mas[i]);
	}
	for(i=0;i<=6;i++)
		printf("%i ",mas[i]);
}
Массив включает 7 элементов. Я их последовательно ввожу, но в конце вылазит ошибка (после ввода последнего элемента). Если увеличить размер массива, то ошибка исчезает. Вопрос: какова причина возникновения ошибки?

Последний раз редактировалось Stilet; 24.07.2014 в 21:27.
Shredzer вне форума Ответить с цитированием
Старый 24.07.2014, 16:47   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Откуда 7, если вы сами написали 6?
p51x вне форума Ответить с цитированием
Старый 24.07.2014, 16:50   #3
Shredzer
 
Регистрация: 24.07.2014
Сообщений: 5
По умолчанию

Номерация начинается с 0.
Shredzer вне форума Ответить с цитированием
Старый 24.07.2014, 17:10   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Начинается кто ж спорит, но вы объвили
Код:
int mas[6];
МАССИВ ИНТОВ ИЗ 6 ЭЛЕМЕНТОВ
p51x вне форума Ответить с цитированием
Старый 24.07.2014, 19:10   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

p51x давайте я попробую объяснить...
Если вы объявляете массив:
Код:
int mas[6];
Выделяется память под массив:

[0][1][2][3][4][5] - в ячейках я написал индексы для обращения к элементам

Соответственно как написать цикл:
Код:
for(int i = 0; i < 6; i++) {
   printf("mas[%d] - ", i);
   scanf("%d", &mas[i]);
}
Думаю что-то вроде этого...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.07.2014, 20:08   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ну можно еще проще:
У Васи было 6 яблок
Код:
яблоки ябл[6];
И как только он их не считал и от 0, и от 1, и от 100, и палочками, и снежинками, а седьмого так и не появилось...
p51x вне форума Ответить с цитированием
Старый 25.07.2014, 12:16   #7
Shredzer
 
Регистрация: 24.07.2014
Сообщений: 5
По умолчанию

Понял. Спасибо. Но почему тогда при выводе последний элемент все равно появляется на экране? Ведь не самостоятельно же увеличивается размерность массива.
Shredzer вне форума Ответить с цитированием
Старый 25.07.2014, 12:26   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Shredzer Посмотреть сообщение
Понял. Спасибо. Но почему тогда при выводе последний элемент все равно появляется на экране? Ведь не самостоятельно же увеличивается размерность массива.
с++ , впрочем возможно как и все сишные языки, не следят за выходом за пределы массива, в отличие от паскаля к примеру, они попросту выводят тот "мусор" который у вас лежит сразу после массива. В данном случае у вас имеется доступ к памяти после массива, а порой доступа нет и выдает соответствующую ошибку чтения памяти по такому-то адресу.
вы можете вывести и далее по индексам, то что за пределами массива, но там уже будут "мусорные данные".
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 27.07.2014, 00:07   #9
Shredzer
 
Регистрация: 24.07.2014
Сообщений: 5
По умолчанию

Еще один вопрос.
Код:
#include <stdio.h>
void main(void){
	char mas[6];
	for(int i=0;i<=5;i++){
		printf("mas[%i]\n",i);
		scanf("%c",&mas[i]);
	}
	for (i=0;i<=5;i++){
		printf("%c ",mas[i]);
	}
}
Массив из символов. Когда программа просит ввести mas[0] я ввожу, например, 'a' и жму enter. Далее программа просит ввести сразу mas[2], т.к. mas[1] содержит мой enter. Можно ввести сразу строку из 6 элементов и все они последовательно поместятся в массив. А на экране высветится mas[1] mas[2] mas[3] ... mas[5]. Поясните пожалуйста, как работает scanf в этом случае. И что происходит, если я пишу
scanf("%c\n",&mas[i]);
Как мне поступить, если я захочу вводить элементы последовально, подтверждая ввод enter'ом.

Последний раз редактировалось Stilet; 27.07.2014 в 00:13.
Shredzer вне форума Ответить с цитированием
Старый 27.07.2014, 00:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char mas[6]; scanf("%6s",&mas); //Ввоим только 6 символов одной командой
	int i;
	for (i=0;i<=5;i++){
		printf("%c\n",mas[i]);
	}
	getchar();
    return 0;
}
Цикл не нужен.
Так понятно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос Сохранение массива в файл и чтение массива из файла vvzvlad Помощь студентам 2 05.11.2013 23:27
Возвращение к вводу данных Peleduy Общие вопросы C/C++ 18 27.07.2012 16:35
Вопрос по вводу Jack125 Помощь студентам 1 01.04.2012 20:07
вопрос по файловому вводу в Паскале Elabrion Помощь студентам 2 29.06.2011 21:44
Вопрос по вводу матрицы (оформление) БаунтЯ Помощь студентам 0 28.01.2010 22:46