Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 27.02.2016, 22:25   #1
Мой повелитель
Пользователь
 
Аватар для Мой повелитель
 
Регистрация: 04.01.2016
Сообщений: 93
По умолчанию помогите с генератором слов

Код:
#include "wordgen.h"
int wordgenerator(int rand_number,char word[7])
{
	int b = 0;
	char massword[27] = { 'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M','\0' };
		for (int i = 0; b < 6; i++)
		{
			if (rand_number == i)
			{
				word[b] == massword[i];
				i = 0;
				b++;
			}
		}
	for (int i = 0; i < 7; i++)
	{
		return word[i];
	}
}


Код:
#include <iostream>
#include<ctime>
#include "wordgen.h"
using namespace std;
int main()
{
	setlocale(LC_ALL, "Russian");
	srand(time(0));
	char word[7];
	int rand_number = 0 + rand() % 26;
	cout << wordgen(rand_number, word[7]) << endl;
		system("pause");
	return 0;
}
Код:
#ifndef wordgen
#define wordgen
int wordgenerator(int rand_value,char word[7]);
#endif
Раньше делал генератор слов без массива и без функции.Сейчас не получилось.Уже сколько раз смотрю,ошибок не нахожу.Но выводит только M.Помогите пожалуйста!
Мой повелитель вне форума Ответить с цитированием
Старый 27.02.2016, 22:34   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,503
По умолчанию

Ну начните с того, что в мейне вы передали в wordgen не массив, а его один элемент (причем находящийся за пределами массива, после последнего элемента).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.02.2016, 23:16   #3
Мой повелитель
Пользователь
 
Аватар для Мой повелитель
 
Регистрация: 04.01.2016
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну начните с того, что в мейне вы передали в wordgen не массив, а его один элемент (причем находящийся за пределами массива, после последнего элемента).
Нуль терминатор именуется седьмым.Похоже функция не может нормально работать с целыми массивами,особенно имея в себе цикл.
Мой повелитель вне форума Ответить с цитированием
Старый 27.02.2016, 23:29   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

Цитата:
Нуль терминатор именуется седьмым.Похоже функция не может нормально работать с целыми массивами,особенно имея в себе цикл.
у массива char[7] нет элемента с индексом 7.(у массивов нет терминаторов)
далее, функция вернется на первом return. цикл прервется.

для передачи массива нужно передавать его без индекса.
кстати код не должен был скомпилироваться в принципе, вы передали char вместо char[7]
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2016, 23:29   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,503
По умолчанию

Причем тут нуль терминатор, вы память в массиве выделили под 7 элементов (индексы 0-6), обращаться к элементам за пределами этого нельзя, и никакой нуль терминатор за пределами массива не появится (к тому же неинициализированного).

В общем читайте основы про массивы в любом учебнике по С.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.02.2016, 23:38   #6
Мой повелитель
Пользователь
 
Аватар для Мой повелитель
 
Регистрация: 04.01.2016
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у массива char[7] нет элемента с индексом 7.(у массивов нет терминаторов)
далее, функция вернется на первом return. цикл прервется.

для передачи массива нужно передавать его без индекса.
кстати код не должен был скомпилироваться в принципе, вы передали char вместо char[7]
Разве у массивов типа char нет терминаторов?
0 - [1],1 - [2],2 - [3],3 - [4],4 - [5],5 - [6],6 - [7]
7 - нуль терминатор.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Причем тут нуль терминатор, вы память в массиве выделили под 7 элементов (индексы 0-6), обращаться к элементам за пределами этого нельзя, и никакой нуль терминатор за пределами массива не появится (к тому же неинициализированного).

В общем читайте основы про массивы в любом учебнике по С.
Пересмотрел,понял в чём проблема.Спасибо.

Последний раз редактировалось Пепел Феникса; 27.02.2016 в 23:47.
Мой повелитель вне форума Ответить с цитированием
Старый 27.02.2016, 23:46   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

Цитата:
Сообщение от Мой повелитель Посмотреть сообщение
Разве у массивов типа char нет терминаторов?
0 - [1],1 - [2],2 - [3],3 - [4],4 - [5],5 - [6],6 - [7]
7 - нуль терминатор.
нет, просили 7 байт, вот вам 7 байт.
инициализируйте его сами.

и на будущее, старайтесь пользоваться кнопкой
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с gii генератором кода yii фреймворка. Создание моделей и CRUD контроллера. anet040885 Общие вопросы Delphi 0 13.01.2014 13:37
Зарубежные микроконтроллеры с встроенным ШИМ-генератором MyLastHit Компьютерное железо 6 22.10.2013 13:33
посчитать количество всех слов,слов-маркеров и процент слов-маркеров ksenya91 Помощь студентам 9 09.01.2013 06:00
генератором случайных чисел получить и нарисовать на экране заданное количество окружностей. edikesh Помощь студентам 3 28.05.2012 17:47
Помогите с генератором чисел на Pascal vadmaruschak Помощь студентам 6 13.09.2009 16:06


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS