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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

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

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
С++ не могу найти ошибку
« : 27 Сентябрь 2014, 12:45:02 »
Всем привет! :D Перешел с си на си++. Сегодня написал не большую прогу которая чёт не компилиться, пишет  предупреждение: «d» may be used uninitialized in this function [-Wuninitialized]  :-\
Не могу найти ошибку сам код вот:
#include <iostream>
 #include <cstdlib>
 using namespace std;
 
 int main ()
 {
    int  x, k, l, d;
   
    x = rand()%(101);
   
    cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
    L:cin>>k;
    if (k>x) {cout<<"Ты не угадал! Твое число больше загаданого!";cout<<endl;}
    if (k<x) {cout<<"Ты не угадал! Твое число меньше загаданого!";cout<<endl;}
    if (k==x) {cout<<"Молодец! Ты угадал!";
    cout<<endl;
    goto K;
    d++;}
    if (d==5){
cout<<"  000       00     0      0   00000         000   0       0  00000   0000";
cout<<" 0         0  0    0 0  0 0   0            0   0   0     0   0       0  0";
cout<<" 0        0    0   0  00  0   00000        0   0    0   0    00000   000";
cout<<" 0  00    000000   0      0   0            0   0     0 0     0       0  0";
cout<<"  000     0    0   0      0   00000         000       0      00000   0    0";
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 16.04 LTS with GNOME 3.

Оффлайн лесной_зонтик

  • Старожил
  • *
  • Сообщений: 2223
  • Просьба на количество сообщений не смотреть.
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #1 : 27 Сентябрь 2014, 13:26:17 »
Прошу прощения, я давно-о-о-о-о не занимался программированием, так что могу быть неправ.
1. он тебе говорит
Цитировать
«d» may be used uninitialized in this function [-Wuninitialized]
т.е. "d" у тебя не инициализированна. попробуй сначала присвоить значение d равное 0.
2. а какой смысл увеличивать d только в случае если число угадано (хотя, судя по "goto K" оно у тебя никогда не увеличится)?


(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 27 Сентябрь 2014, 13:35:40 от лесной_зонтик »
Моя мечта поставить на комп Linux, Unix, *BSD, Mac OS X, OpenSolaris, OS/2, Windows.
Не спрашивайте зачем. Сам не знаю ???

Оффлайн Komorebi

  • Активист
  • *
  • Сообщений: 477
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #2 : 27 Сентябрь 2014, 13:45:16 »
goto  ;D

Оффлайн Lamer2010

  • Участник
  • *
  • Сообщений: 138
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #3 : 27 Сентябрь 2014, 15:44:23 »
использование оператора goto считается плохим тоном, так как приводит к запутанности и сложной читабельности кода, поэтому лучше отвыкать от такой плахой привычки использования goto

Lifewalker

  • Гость
Re: С++ не могу найти ошибку
« Ответ #4 : 27 Сентябрь 2014, 17:53:18 »
Господи, и тут goto!!!
Вас не учили циклам while и until или где? :knuppel2:
Возможно, в Си++ они называются иначе, чем в нормальных языках, но суть та же.

Что до ошибки, то всё элементарно: в выражении d++; вы обращаетесь к переменной d, значение которой в этом месте не определено.
« Последнее редактирование: 27 Сентябрь 2014, 17:56:19 от Lifewalker »

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

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #5 : 27 Сентябрь 2014, 22:02:17 »
Спасибо за советы программку подкоректировал, теперь она выглядит так:
Код: C++
  1.  #include <iostream>
  2.  #include <cstdlib>
  3.  using namespace std;
  4.  
  5.  int main ()
  6.  {
  7.     int  x, k, l, d;
  8.    
  9.     x = rand()%(101);
  10.     d = 0;
  11.    
  12.     cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
  13.     L:cin>>k;
  14.     if (k>x) {cout<<"Ты не угадал! Твое число больше загаданого!";cout<<endl; d++;}
  15.     if (k<x) {cout<<"Ты не угадал! Твое число меньше загаданого!";cout<<endl; d++;}
  16.     if (k==x) {cout<<"Молодец! Ты угадал!";
  17.     cout<<endl;
  18.     goto K;}
  19.     if (d==5){
  20.                 cout<<"  000       00     0      0   00000         000   0       0  00000   0000";
  21.                  cout<<endl;
  22.                 cout<<" 0         0  0    0 0  0 0   0            0   0   0     0   0       0  0";
  23.                  cout<<endl;
  24.                 cout<<" 0        0    0   0  00  0   00000        0   0    0   0    00000   000";
  25.                  cout<<endl;
  26.                 cout<<" 0  00    000000   0      0   0            0   0     0 0     0       0  0";
  27.                  cout<<endl;
  28.                 cout<<"  000     0    0   0      0   00000         000       0      00000   0    0";
  29.                  cout<<endl;
  30.                 goto K;}
  31.                 cout<<"Попробуй ещё раз: ";
  32.     goto L;
  33.     K:cout<<"Попробовать ещё раз? (да-1; нет-2)";
  34.     cin>>l;
  35.     if (l==1) {goto L;}
  36.     else
  37.     return 0;
  38.     }
Программка работает но есть одна проблема: с новым запуском программы число остаётся прежним. Заранее спасибо :)
« Последнее редактирование: 27 Сентябрь 2014, 23:26:08 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 16.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #6 : 27 Сентябрь 2014, 22:08:04 »
Гриб_под_зонтом, избався от goto прочитай про инициализацию рандома, иесли напишешь [code=cpp][/code]то будет подсветка синтаксиса.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #7 : 27 Сентябрь 2014, 23:22:36 »
примерно та
Программка работает но есть одна проблема: с новым запуском программы число остаётся прежним. Заранее спасибо :)

В начале можно сделать примерно так:

Код: C++
  1. int main ()
  2.  {
  3.     goto E;
  4.     B:int  x, k, l, d;
  5.     goto D;
  6.     C:d = 0;
  7.     goto L;
  8.     D:std::srand(time(NULL));
  9.     goto A;
  10.     E:cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
  11.     goto B;
  12.     A:x = rand()%(101);
  13.     goto C;
  14.     L:std::cin>>k;
  15.  
  16. ...

А если проще: используй srand перед запуском генератора псевдослучайного числа rand.
« Последнее редактирование: 27 Сентябрь 2014, 23:26:26 от unimix »

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #8 : 27 Сентябрь 2014, 23:45:56 »
unimix, зачем столько goto? :knuppel2:
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #9 : 28 Сентябрь 2014, 00:00:01 »
unimix, зачем столько goto? :knuppel2:
Зачем? Чтобы продемонстрировать всю прелесть goto на лёгком примере. Можно усложнить, например с приминением #define.

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

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #10 : 28 Сентябрь 2014, 00:03:40 »
unimix, зачем столько goto? :knuppel2:
Это тонкий намёк на то , что из-за того что я использую goto код нечитабельный
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 16.04 LTS with GNOME 3.

Оффлайн Komorebi

  • Активист
  • *
  • Сообщений: 477
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #11 : 28 Сентябрь 2014, 03:14:36 »
нормальных языках
Это каких?) Любитель дельфи-мертвячинки, полагаю?)

Lifewalker

  • Гость
Re: С++ не могу найти ошибку
« Ответ #12 : 28 Сентябрь 2014, 08:42:52 »
нормальных языках
Это каких?) Любитель дельфи-мертвячинки, полагаю?)
Поскольку вы слегка не в теме, то я сделаю вид, что не заметил наезда. Нормальный язык - это когла пишешь программу, и по тексту понятно что и куда. Делфи - хороший язык, но Ада лучше. После близкого знакомства с последним на Си++ вообще смотреть не могу без передергивания плечами.

Оффлайн Komorebi

  • Активист
  • *
  • Сообщений: 477
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #13 : 28 Сентябрь 2014, 14:23:33 »
Поскольку вы слегка не в теме, то я сделаю вид, что не заметил наезда. Нормальный язык - это когла пишешь программу, и по тексту понятно что и куда. Делфи - хороший язык, но Ада лучше. После близкого знакомства с последним на Си++ вообще смотреть не могу без передергивания плечами.
Значит, в целом я угадал) Всегда забавно наблюдать, как неосилившие cpp люди начинают поливать его грязью)

Оффлайн Lamer2010

  • Участник
  • *
  • Сообщений: 138
    • Просмотр профиля
Re: С++ не могу найти ошибку
« Ответ #14 : 28 Сентябрь 2014, 15:56:17 »
unimix, зачем столько goto? :knuppel2:
Это тонкий намёк на то , что из-за того что я использую goto код нечитабельный
когда начнёшь писать код побольшего объёма, с этим goto просто запутаешся, лучше просто забудь что существует такой оператор goto и не применяй его
« Последнее редактирование: 28 Сентябрь 2014, 16:00:30 от Lamer2010 »

 

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