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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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 18.04 LTS with GNOME 3.

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

  • Старожил
  • *
  • Сообщений: 2225
  • Просьба на количество сообщений не смотреть.
    • Просмотр профиля
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

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

Оффлайн Lamer2010

  • Участник
  • *
  • Сообщений: 151
    • Просмотр профиля
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 »
Спасибо за советы программку подкоректировал, теперь она выглядит так:
Код: (=cpp) [Выделить]
#include <iostream>
 #include <cstdlib>
 using namespace std;
 
 int main ()
 {
    int  x, k, l, d;
   
    x = rand()%(101);
    d = 0;
   
    cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
    L: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<<"  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;
goto K;}
cout<<"Попробуй ещё раз: ";
    goto L;
    K:cout<<"Попробовать ещё раз? (да-1; нет-2)";
    cin>>l;
    if (l==1) {goto L;}
    else
    return 0;
    }
Программка работает но есть одна проблема: с новым запуском программы число остаётся прежним. Заранее спасибо :)
« Последнее редактирование: 27 Сентября 2014, 23:26:08 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • 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 »
примерно та
Программка работает но есть одна проблема: с новым запуском программы число остаётся прежним. Заранее спасибо :)

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

Код: (cpp) [Выделить]
int main ()
 {
    goto E;
    B:int  x, k, l, d;
    goto D;
    C:d = 0;
    goto L;
    D:std::srand(time(NULL));
    goto A;
    E:cout<<"Привет! Сейчас я предлагаю тебе сыграть в игру Угадай число. Итак начнём: я загадал число от 0 до 100. Твоя задача угадать его: ";
    goto B;
    A:x = rand()%(101);
    goto C;
    L:std::cin>>k;

...

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

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • 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 18.04 LTS with GNOME 3.

Оффлайн Komorebi

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

Lifewalker

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

Оффлайн Komorebi

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

Оффлайн Lamer2010

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

 

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