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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 21:01   #1
valdemar593
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 20
Сообщение Вывод значения элементов массива

Граждане всем доброго времени суток.
Вопрос по коду. Почему при выводе значения элементов все они равны -858993460.
Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
void main()
{
	srand( time(NULL) );
	::SetConsoleCP(1251);
	::SetConsoleOutputCP(1251);
	int ms[5][3];
	int mss[5];
	int znachenie[10000];
	for (int i = 0; i < 10000; i++)
		znachenie[i] = i;
	for (int i = 0; i < 5; i++)
	{
		int j = 0;
		while (j < 3)
		{	
			int a = rand()%10000;
			if (a > 1000) 
			{	
				ms[i][j] = znachenie[a];
				j++;                                   // Сдесь 
				cout << ms[i][j] << " ";  
			}
		}
		cout << endl;
	}
	char n;
	cout << "Введите номер столбца с вашим числом" 
		 << endl;
	cin >> n;
	switch(n)
	{
		case '1':
		for (int i = 0; i < 5; i++)
			{
				ms[i][0] = mss[i];
			}
	
		case '2':
		for (int i = 0; i < 5; i++)
			{
				ms[i][1] = mss[i];
			}
		case '3':
	
		for (int i = 0; i < 5; i++)
			{
				ms[i][2] = mss[i];
			}
	}
	cout << "Ваш номер в этом столбце"
	       << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << mss[i] << endl;             // И сдесь соответственно
	}
}
valdemar593 вне форума Ответить с цитированием
Старый 22.12.2009, 21:05   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
j++;                                   // Сдесь 
cout << ms[i][j] << " ";
Сначала увеличиваете j, а потом читаете число им адресованное ) проблема в том, что оно ещё не инициализировано, потому там мусор - поменяйте местами эти две инструкции(вывод и инкремент j) и тогда должно нормально работать.
Только один вопрос, зачем заводить массив из 10000 элементов, а затем случайным образом брать оттуда один из них? О_О
Не проще ли так:
Код:
ms[i][j] = rand() % 9000 + 1000;
?
netrino вне форума Ответить с цитированием
Старый 22.12.2009, 21:10   #3
valdemar593
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 20
По умолчанию

И вправду так гораздо проще. Только осваиваю функцию rand() cпасибо =). C выводом частично сработало. Первый раз cout нормально отображает матрицу. А вот второй раз после присваивания второму массиву значения элементов выбранного столбика происходит опять фишка с -858993460.
Код:
char n;
	cout << "Введите номер столбца с вашим числом" 
		 << endl;
	cin >> n;
	switch(n)
	{
		case '1':
		for (int i = 0; i < 5; i++)
			{
				ms[i][0] = mss[i];
			}
	
		case '2':
		for (int i = 0; i < 5; i++)
			{
				ms[i][1] = mss[i];
			}
		case '3':
	
		for (int i = 0; i < 5; i++)
			{
				ms[i][2] = mss[i];
			}
	}
	cout << "Ваш номер в этом столбце"
	       << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << mss[i] << endl;             // Вот тут
	}
valdemar593 вне форума Ответить с цитированием
Старый 22.12.2009, 21:17   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Опять те же грабли %)
Вы же выводите неинициализированный вектор mss!
Код:
int n;
cin >> n;
for(int i = 0; i < 5; i++)
    mss[i] = ms[i][n-1];   // вместо switch. и обратите внимание, что теперь mss[i] слева от "="!
...

Последний раз редактировалось netrino; 22.12.2009 в 21:28. Причина: исправил недочёт
netrino вне форума Ответить с цитированием
Старый 22.12.2009, 21:22   #5
valdemar593
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 20
По умолчанию

О теперь всё просто и понятно стало, спасибо большое =)
valdemar593 вне форума Ответить с цитированием
Старый 22.12.2009, 21:30   #6
valdemar593
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 20
По умолчанию

Новая неприятность. После ввода номера столбика программа завершается ошибкой
"Run-Time Check Failure #2 - Stack around variable 'ms' was corrupted."
Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
void main()
{
	srand( time(NULL) );
	::SetConsoleCP(1251);
	::SetConsoleOutputCP(1251);
	int ms[5][3];
	int mss[5];
	for (int i = 0; i < 5; i++)
	{
		int j = 0;
		while (j < 3)
		{	
			int a = rand()%9000 + 1000;
			{	
				ms[i][j] = a;
				cout << ms[i][j] << " ";
				j++;
			}
		}
		cout << endl;
	}
	char n;
	cout << "Введите номер столбца с вашим числом" 
		 << endl;
	cin >> n;      // СДЕСЬ
	cout << "Вашь номер в этом столбике" << endl;
	for (int i =0; i < n; i++)
	{
		mss[i] = ms[i][n - 1];
		cout << mss[i];
	}
}
valdemar593 вне форума Ответить с цитированием
Старый 22.12.2009, 21:35   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

я в своём посте исправил, n должна быть типа int, или нужно дополнительно отнимать от неё 0x30, но так будет некрасиво смотреться )
Кстати, раз уж mss[i] больше нигде не используется, то есть ли смысл сохранять значения столбца в неё?
Код:
int n;
cout << "введите номер столбца с вашим числом" << endl;
cin >> n;
for(int i = 0; i < n; i++)
    cout << ms[i][n-1];
netrino вне форума Ответить с цитированием
Старый 22.12.2009, 21:37   #8
valdemar593
Пользователь
 
Регистрация: 22.12.2009
Сообщений: 20
По умолчанию

Логично и просто =)
Спасибо.
valdemar593 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
найти среднее арифметическое элементов массива состоящее из 5 элементов viatlon Общие вопросы C/C++ 9 12.12.2009 00:45
Вывод ко-ва элементов массива меньших заданного числа в C++ xnise Помощь студентам 2 30.11.2009 19:25
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Вывод ненулевых элементов массива Ci_novice Общие вопросы C/C++ 2 28.12.2007 14:59