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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2017, 00:35   #1
treup
Пользователь
 
Регистрация: 10.07.2017
Сообщений: 14
Печаль почему так

Код:
int main()
{
	int arr[10];
	int s, a,z;
	int o = 0;
		std::cin >> a;
	while (!a==1)
	{
if (a % 2 == 0){
	
	arr[o] = 2;
	a /= 2;
	o++;
}
else if (a % 3 == 0) {
	
	arr[o] = 3;
	a /= 3;
	o++;
	}
else if (a % 3 == 0) {
	
	arr[o] = 5;
	a /= 5;
	o++;
}
else if (a % 3 == 0) {
	
	arr[o] = 7;
	a /= 7;
	o++;
}

	}
	for (s = 0; s <= 10; s++) {
		std::cout << " " << arr[s];
	}
	system("pause");
почему в массиве отрицательные большие числа помогите

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 10.09.2017 в 00:50.
treup вне форума Ответить с цитированием
Старый 10.09.2017, 00:47   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что они там оказались при выделении памяти под массив.
И потому что
Код:
    int a = 42;
    std::cout << !a << "\n";
    std::cout << !!a;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.09.2017 в 00:49.
Alex11223 вне форума Ответить с цитированием
Старый 10.09.2017, 09:40   #3
treup
Пользователь
 
Регистрация: 10.07.2017
Сообщений: 14
Вопрос

можете расписать по подробней, как решить проблему, я дурак и не чего не понял
treup вне форума Ответить с цитированием
Старый 10.09.2017, 10:20   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Когда вы объявляете локальный массив, то под него выделяется память, НО никто не чистит, не обнуляет ее за вас. Что там было, то и будет у вас в массиве.
2. Создайте новый проект с указанными тремя строчками и посмотрите вывод. Ну или возпользуйтесь одним из онлайн компиляторов.
p51x на форуме Ответить с цитированием
Старый 10.09.2017, 10:34   #5
treup
Пользователь
 
Регистрация: 10.07.2017
Сообщений: 14
По умолчанию

почему тогда тут все правильно
Код:
int arr[10];
	int o=0;
	int a;
	int i;
for (a = 0; a <= 3; a++) {
	
		arr[o] = a;
		o++;

	}
for (i = 0; i <= 3; i++) {
	std::cout << " " << arr[i];
}
		system("pause");
    return 0;
}
treup вне форума Ответить с цитированием
Старый 10.09.2017, 11:04   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Именно потому что выше. ВЫ проинициализировали 4 элемента массива (присвоили им значения), остальные 6 по прежнему мусор. НО ВЫ дальше используете только эти 4 элемента.

П.С. Кстати, в
Код:
for (s = 0; s <= 10; s++) {
выход за границы массива.

Последний раз редактировалось p51x; 10.09.2017 в 11:07.
p51x на форуме Ответить с цитированием
Старый 10.09.2017, 11:09   #7
treup
Пользователь
 
Регистрация: 10.07.2017
Сообщений: 14
По умолчанию

тогда почему тут
Код:
int main()
{
	int arr[10];
	int s, a,z;
	int o = 0;
		std::cin >> a;
	while (!a==1)
	{
if (a % 2 == 0){
	
	arr[o] = 2;
	a /= 2;
	o++;
}
else if (a % 3 == 0) {
	
	arr[o] = 3;
	a /= 3;
	o++;
	}
else if (a % 3 == 0) {
	
	arr[o] = 5;
	a /= 5;
	o++;
}
else if (a % 3 == 0) {
	
	arr[o] = 7;
	a /= 7;
	o++;
}

	}
	for (s = 0; s <= 10; s++) {
		std::cout << " " << arr[s];
	}
	system("pause");
почему не присвоились значения при выполнения if
treup вне форума Ответить с цитированием
Старый 10.09.2017, 11:14   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Давайте по порядку: что вы ввели в качестве a?
p51x на форуме Ответить с цитированием
Старый 10.09.2017, 11:19   #9
treup
Пользователь
 
Регистрация: 10.07.2017
Сообщений: 14
По умолчанию

самое простое 4
treup вне форума Ответить с цитированием
Старый 10.09.2017, 11:23   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы протестировали те 3 строки, что вам давали или прочитали как оно работает. Ведь так?
Тогда, идем дальше:
2.
Код:
while (!a==1)
Условие цикла 0 == 1 -> не выполняется -> цикл не крутиться

Дальше понятно?
p51x на форуме Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему так... Hermeneticus Общие вопросы C/C++ 2 22.07.2017 17:20
Почему так? Za_Stalina Свободное общение 14 16.12.2010 08:45
Почему не так? Nikita++ Помощь студентам 1 20.10.2010 21:19
Почему так? Сильванович Михаил Общие вопросы C/C++ 2 03.07.2007 11:57