Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: С++ не могу найти ошибку  (Прочитано 13273 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #30 : 29 Сентября 2014, 20:38:48 »
При убирании старых проблем возникли новые: рандомное число не всегда целое(например при вводе 59 пишет что число меньше заданного, а при вводе 60 что больше), и перестало выводиться game over. Код собственно вот:
Код: (cpp) [Выделить]
#include <iostream>
 #include <cstdlib>
 #include <ctime>
 using namespace std;
 
 int main ()
 {
    int  x, k, l, d;
 
    cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
    L: srand( time(0) );
    x = rand()%(101);
    d=0;
    cin>>k;
    if (k>x) {cout<<"Ты не угадал! Твое число больше загаданого!";cout<<endl; d++;}
    if (k<x) {cout<<"Ты не угадал! Твое число меньше загаданого!";cout<<endl; d++;}
    if (k==x) {cout<<"Молодец! Ты угадал!";
    cout<<endl;
    goto K;}
    if (d==5){
cout<<endl;
cout<<"  000       00     0      0   00000         000   0       0  00000   0000";
cout<<endl;
cout<<" 0         0  0    0 0  0 0   0            0   0   0     0   0       0  0";
cout<<endl;
cout<<" 0        0    0   0  00  0   00000        0   0    0   0    00000   000";
cout<<endl;
cout<<" 0  00    000000   0      0   0            0   0     0 0     0       0  0";
cout<<endl;
cout<<"  000     0    0   0      0   00000         000       0      00000   0    0";
cout<<endl;
cout<<endl;
goto K;}
cout<<"Попробуй ещё раз: ";
    goto L;
    K:cout<<"Попробовать ещё раз? (да-1; нет-2)";
    cin>>l;
    if (l==1) {goto L;}
    else
    return 0;
    }
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #31 : 29 Сентября 2014, 21:10:21 »
Это потому, что на каждую попытку угадать загаданное число, генерируется новое рендомное число.

А вообще-то надо самому учиться искать такие ошибки. Для этого надо последовательно читать строки и выполнять указанные действия в уме. Вот тут то и понравится вся мощь goto.
« Последнее редактирование: 29 Сентября 2014, 21:28:21 от unimix »

Оффлайн goditsa8

  • Участник
  • *
  • Сообщений: 231
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #32 : 29 Сентября 2014, 22:02:28 »
Гриб_под_зонтом,
Тоже изучаю C++.
Цитировать
рандомное число не всегда целое
Быть не может: int x - целое, иначе компилятор бы выругался.
Цитировать
перестало выводиться game over
Каждый цикл d = 0; Беспроигрышный вариант )))
Вот мой вариант (фтопку goto):
(Нажмите, чтобы показать/скрыть)
Кажется, всё работает )))
В маленьких программках, тем более, пока учишься, удобно выводить интересующую тебя переменную прямо в коде. ИМХО
Ступил, число же один раз загадывается) Вот так будет правильнее:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 29 Сентября 2014, 22:11:42 от goditsa8 »

Lifewalker

  • Гость
Re: С++ не могу найти ошибку
« Ответ #33 : 29 Сентября 2014, 23:46:54 »
Не удержался и повторил подвиг топикстартера, используя другой язык программирования. Можно было сделать красивее, но лениво. :)
Однако, генератор случайных чисел 100%  работает как надо.
with Text_IO;
with Ada.Numerics.Discrete_Random;

procedure Lesson001 is
   
   procedure Hello is
   begin
      Text_IO.Put_Line ("Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число.");
      Text_IO.Put ("Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ");
      Text_IO.New_Line;
   end Hello;
   
   procedure GameOver is
   begin
      Text_IO.Put_Line ("  000       00     0      0   00000         000   0       0  00000   0000");
      Text_IO.Put_Line (" 0         0  0    0 0  0 0   0            0   0   0     0   0       0  0");
      Text_IO.Put_Line (" 0        0    0   0  00  0   00000        0   0    0   0    00000   000");
      Text_IO.Put_Line (" 0  00    000000   0      0   0            0   0     0 0     0       0  0");
      Text_IO.Put_Line ("  000     0    0   0      0   00000         000       0      00000   0    0");
   end GameOver;

   package PIIO is new Text_IO.Integer_IO (Integer);
   subtype TIntRand is Integer range 1..100;
   package PIntRand is new Ada.Numerics.Discrete_Random (TIntRand);
   Gen : PIntRand.Generator;
   DrawNum : TIntRand;
   SuppNum : Integer;
   TryCnt : Integer := 0;
   CntnRq : Integer;
   
begin
   Hello;
   PIntRand.Reset (Gen);
   loop
      DrawNum := PIntRand.Random (Gen);
      while TryCnt < 5 loop
         PIIO.Get (SuppNum);
         if SuppNum > DrawNum then
            Text_IO.Put_Line ("Ты не угадал! Твое число больше загаданого!");
         elsif SuppNum < DrawNum then
            Text_IO.Put_Line ("Ты не угадал! Твое число меньше загаданого!");
         elsif SuppNum = DrawNum then
            Text_IO.Put_Line ("Молодец! Ты угадал!"); TryCnt := 0;
            exit;
         end if;
         TryCnt := TryCnt + 1;
      end loop;
      if TryCnt = 5 then
         GameOver; TryCnt := 0;
      end if;
      Text_IO.Put_Line ("Попробовать ещё раз? (да-1; нет-2)");
      PIIO.Get (CntnRq);
      exit when CntnRq >= 2;
   end loop;
end Lesson001;
« Последнее редактирование: 29 Сентября 2014, 23:50:37 от Lifewalker »

Оффлайн Komorebi

  • Активист
  • *
  • Сообщений: 479
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #34 : 29 Сентября 2014, 23:54:51 »
Цитировать
end if;
end loop;
CntnRq

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #35 : 29 Сентября 2014, 23:57:09 »
Скрепя сердце попрощался с goto навсегда. Программа заработала , вот код :
Код: (cpp) [Выделить]
#include <iostream>
 #include <cstdlib>
 #include <ctime>
 using namespace std;
 
 int main ()
 {
    int  x, k, d;
 
    cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
     srand( time(0) );
    x = rand()%(101);
      for (d=0; d<8; d++) {

  cin>>k;
 
         if (k>x) {cout<<"Ты не угадал! Твое число больше загаданого!";cout<<endl;}
   
         if (k<x) {cout<<"Ты не угадал! Твое число меньше загаданого!";cout<<endl;}
   
         if (k==x) {cout<<"Молодец! Ты угадал! Поэтому ты получаешь конфетку:"; cout<<endl;
         
         cout<<"0                                       0"; cout<<endl;
         cout<<"0 0                                   0 0"; cout<<endl;
         cout<<"0  0   0 0 0 0 0 0 0 0 0 0 0 0 0 0   0  0"; cout<<endl;
         cout<<"0   0  0                         0  0   0"; cout<<endl;
         cout<<"0    0 0                         0 0    0"; cout<<endl;
         cout<<"0     00                         00     0"; cout<<endl;
         cout<<"0    0 0                         0 0    0"; cout<<endl;
         cout<<"0   0  0                         0  0   0"; cout<<endl;
         cout<<"0  0   0 0 0 0 0 0 0 0 0 0 0 0 0 0   0  0"; cout<<endl;
         cout<<"0 0                                   0 0"; cout<<endl;
         cout<<"0                                       0"; cout<<endl;
         return 0;
         }
}
cout<<endl;
cout<<"  000       00     0      0   00000         000   0       0  00000   0000";
cout<<endl;
cout<<" 0         0  0    0 0  0 0   0            0   0   0     0   0       0  0";
cout<<endl;
cout<<" 0        0    0   0  00  0   00000        0   0    0   0    00000   000";
cout<<endl;
cout<<" 0  00    000000   0      0   0            0   0     0 0     0       0  0";
cout<<endl;
cout<<"  000     0    0   0      0   00000         000       0      00000   0    0";
cout<<endl;
cout<<endl;


    return 0;
    }
Всем спасибо за советы :)
« Последнее редактирование: 29 Сентября 2014, 23:59:04 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

 

Страница сгенерирована за 0.054 секунд. Запросов: 25.