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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 00:37   #1
rus1107
Новичок
Джуниор
 
Регистрация: 03.08.2009
Сообщений: 3
По умолчанию Вопрос по проге

я начал учить с++ по книге шилдта за 2005 год пишу по нему программу стараюсь ее сам совершенствовать но бывают и проблемы...вроде этой...

Код:
#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
    int magic,guess,pod,end;
    
    magic = rand();
    
    cout << "Esli hotote podskazku nazhmite 1 esli ne 2\n";
    cin >> pod;
    if (pod == 1) {
            cout << "Vasha podskazka " << rand() << "\n";
            }
    if (pod == 2) {
            cout << "Vy otkazalis oy podskazki\n";
            }
    if ( pod <= 0 , pod >= 3) {
         cout << "Vybor ne veren\n";
}
    cout << "Vvedite svoi variant : \n";
    cin >> guess;
    
    // åñëè çíà÷åíèå guess ñîâïàäàåò ñ ìàãè÷åñêèì ÷èñëîì
    // áóäåò âûâåäåíî
    
    if (guess == magic) cout << " Pravilno=)\n";
    if (guess != magic) cout << "Ne pravilno vot realniy otvet " << magic <<"\n";
    cout << "Vvedite end\n";
    cin >> end;
    return 0;
}

Вопрос: при рендоме всегда на подсказке : 18467 а загаданное число : 41
почему не выпадают другие числа?что не так? и еще одно к комментариям
вписал end так как программирую на компиляторе Dev-C++ после компиляций сразу закрывается окно не успеваю ничего прочитать приходится так...есть варианты решения этой проблемы?
Итак вышло 2 вопроса по программе и самому компилятору)

Последний раз редактировалось Sazary; 03.08.2009 в 12:42.
rus1107 вне форума Ответить с цитированием
Старый 03.08.2009, 00:49   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	int magic,guess,pod,end;
	srand(time(NULL)); //random
	magic = rand();

	cout << "Esli hotote podskazku nazhmite 1 esli ne 2\n";
	cin >> pod;
	if (pod == 1) {
		cout << "Vasha podskazka " << rand() << "\n";
	}
	if (pod == 2) {
		cout << "Vy otkazalis oy podskazki\n";
	}
	if ( pod <= 0 , pod >= 3) {
		cout << "Vybor ne veren\n";
	}
	cout << "Vvedite svoi variant : \n";
	cin >> guess;


	if (guess == magic) cout << " Pravilno=)\n";
	if (guess != magic) cout << "Ne pravilno vot realniy otvet " << magic <<"\n";
	cout << "Vvedite end\n";
	cin >> end;

	cin.get(); //pause
	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 03.08.2009, 02:50   #3
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Добавлю немного пояснений.
rus1107, дело в том, что как Вы вероятно знаете, числа на самом деле не рандомные, а высчитываются последовательно, по определенным алгоритмам. Для расчета следующих "случайных" значений функция должна быть инициализирована уникальным значением.
В Вашем случае
Код:
magic = rand();
функция инициализируется автоматически, своим значением по умолчанию, поэтому каждый раз у вас выпадают одни и те же числа.
Как показал выше ISergeyN, генератор "случайных" чисел можно инициализировать значением времени. Это обеспечивает некую уникальность генерации. Для инициализации генератора применяется функция srand(), которой, в качестве аргумента, следует передать инициализирующее значение, в данном случае время
Код:
srand(time(NULL));
oleg kutkov вне форума Ответить с цитированием
Старый 03.08.2009, 19:05   #4
rus1107
Новичок
Джуниор
 
Регистрация: 03.08.2009
Сообщений: 3
По умолчанию

Спасибо за помощь я не пытаюсь как-то написать что я крут и т.д. так как я учусь по самоучителю я пытаюсь усовершенствовать программу в тех аспектах которые я знаю чтобы закрепит свои знания

Последний раз редактировалось MaTBeu; 04.08.2009 в 01:05.
rus1107 вне форума Ответить с цитированием
Старый 03.08.2009, 21:04   #5
Leonzsmart
Новичок
Джуниор
 
Аватар для Leonzsmart
 
Регистрация: 03.08.2009
Сообщений: 2
По умолчанию Вопрос по проге

Спасибо. Теперь все ясно.
А то уже третий день подыскиваю нового хостера. Зашел на Ваш форум, думаю: вот ведь люди толковым хостингом пользуются.

И если можно еще один вопрос.
Говорят что 3 базы которые дает - это на самом деле одно база, просто как бы поделенная на три. Так ли это на самом деле?
Leonzsmart вне форума Ответить с цитированием
Старый 03.08.2009, 22:46   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Какие 3 базы? Вы о чем вообще говорите? И какое отношение это имеет к данному разделу?
MaTBeu вне форума Ответить с цитированием
Старый 03.08.2009, 23:31   #7
rus1107
Новичок
Джуниор
 
Регистрация: 03.08.2009
Сообщений: 3
По умолчанию

cin.get(); почему-то не работает когда я убрал введите конец окошко опять пролетает...


Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	int magic,guess,pod,end;
	srand(time(NULL)); //random
	magic = rand();

	cout << "Esli hotote podskazku nazhmite 1 esli ne 2\n";
	cin >> pod;
	if (pod == 1) {
		cout << "Vasha podskazka " << magic << "\n";
	}
	if (pod == 2) {
		cout << "Vy otkazalis oy podskazki\n";
	}
	if ( pod <= 0 , pod >= 3) {
		cout << "Vybor ne veren\n";
	}
	cout << "Vvedite svoi variant : \n";
	cin >> guess;


	if (guess == magic) cout << " Pravilno=)\n";
	if (guess != magic) cout << "Ne pravilno vot realniy otvet " << magic <<"\n";


	cin.get(); //pause
	return 0;
}

Последний раз редактировалось MaTBeu; 04.08.2009 в 01:03.
rus1107 вне форума Ответить с цитированием
Старый 04.08.2009, 01:35   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Там после последнего ввода в буфере остается символ перевода строки, который и считывается на последнем cin.get().
Либо чистите буферы:
Код:
_flushall();
cin.get();
либо считывайте этот злосчастный символ:
Код:
getchar();
cin.get();
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.08.2009, 13:29   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Либо игнорируйте его
Код:
   cin.ignore();
   cin.get();
Цитата:
istream& ignore ( streamsize n = 1, int delim = EOF );

Extract and discard characters

Extracts characters from the input sequence and discards them.

The extraction ends when n characters have been extracted and discarded or when the character delim is found, whichever comes first. In the latter case, the delim character itself is also extracted.

Parameters
n
Maximum number of characters to extract (and ignore).
This is an integer value of type streamsize.
delim
Delimiting character.


Return Value
The function returns *this.

cplusplus.com
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Русский в проге gamer123 Помощь студентам 6 22.06.2009 14:14
Ошибка в проге :( Defender42 Помощь студентам 15 29.05.2009 02:08
музыка в проге beygul Помощь студентам 6 09.10.2008 13:27
Вопрос по проге Smorodinka Microsoft Office Excel 7 06.06.2008 23:10
Ошибка в проге Detrix Помощь студентам 1 12.03.2008 08:28