Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
#1

Игра "угадайка" с использованием do while. Ошибка. - C++

03.11.2011, 14:21. Просмотров 2533. Ответов 22
Метки нет (Все метки)

Собственно задача:

Написать программу, играющую с пользователем в "угадайку" - пользователь загадывает число, компьютер пытается его отгадать. Компьютер называет свои варианты, а пользователь отвечает лишь "больше" либо "меньше".


Вот прога:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{  int F;
     int n;
     cout << "Zagadayte cislo ot 1 do 10";
 do {
     int F;
     cout << "Eto chislo" << n << "?";
     cout << "1 esli rovno, 2 esli bolse: >";
     cin  >> F;
        if(F==1) 
        cout << "Ugadal";
        else
        n=n+2;
        while (F==1){ 
        cout << "Ugadal";
        }
 }
getch();
 return 0;
}
Ругается на "n" и getch(), а так же не могу понять как сделать с "меньше".

Добавлено через 3 минуты
Я новичек, так что не ругайтесь пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2011, 14:21     Игра "угадайка" с использованием do while. Ошибка.
Посмотрите здесь:

Синтаксическая ошибка: отсутствие ";" перед "<class-head>" C++
C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
C++ Компилатор, ошибка "expected primary-expression before "int" "
Синтаксическая ошибка: отсутствие ";" перед "<" C++
C++ error C2143: синтаксическая ошибка: отсутствие ";" перед "using"
C++ Игра "Угадайка – 4"
C++ Карточная игра "Дурак" - Ошибка загрузки dll карт
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
03.11.2011, 14:32     Игра "угадайка" с использованием do while. Ошибка. #2
n не инициализировано
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
03.11.2011, 14:32     Игра "угадайка" с использованием do while. Ошибка. #3
А где while?(Тот который с do)
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
03.11.2011, 14:40  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #4
Цитата Сообщение от edward_jonson Посмотреть сообщение
n не инициализировано
на 6-й строке инициализировал.

даже если вставляю его в цикл do, всё равно ругается.

Добавлено через 22 секунды
Цитата Сообщение от zuq Посмотреть сообщение
А где while?(Тот который с do)
на 17-й строке.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.11.2011, 14:41     Игра "угадайка" с использованием do while. Ошибка. #5
Ок, тогда где закрывающая фигурная перед ним?
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
03.11.2011, 14:42     Игра "угадайка" с использованием do while. Ошибка. #6
Цитата Сообщение от mavol Посмотреть сообщение
на 17-й строке.
Ты считаешь, что этот while как-то относиться к do?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.11.2011, 14:42     Игра "угадайка" с использованием do while. Ошибка. #7
Вы не инициализировали, вы объявили. Присвойте n ноль
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
03.11.2011, 14:48  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #8
Цитата Сообщение от zuq Посмотреть сообщение
Ты считаешь, что этот while как-то относиться к do?
Поправил.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{ 
     int n=0;
     cout << "Zagadayte cislo ot 1 do 10";
 do {
     int F;
     cout << "Eto chislo" << n << "?";
     cout << "Vvedite 1 esli rovno, 2 esli bolse: >";
     cin  >> F;
        if(F==1) 
        cout << "Ugadal";
        else
        n=n+2;
        }
        while (F==2)
 getch();
 return 0;
}
n инициализировал.
Теперь ругается на F:
`F' was not declared in this scope
И на getch:
expected `;' before "getch"
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
03.11.2011, 14:54     Игра "угадайка" с использованием do while. Ошибка. #9
Вот так должно работать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
     int n(0), F;
     cout << "Zagadayte cislo ot 1 do 10\n";
 do {
         cout << "Eto chislo" << n << "?\n";
         cout << "Vvedite 1 esli rovno, 2 esli bolse: >";
         cin  >> F;
         if(F == 1) {cout << "Ugadal"; break; }
         else n=n+2;
        }while (F != 1);
 getch();
 return 0;
}
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 00:10  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #10
Вот рабочий вариант. Помогите пару изменений внести пожалуйста.

1. Нужно, чтобы за пределы 10 увеличить нельзя было и выводилось сообщение:
Вводить больше 10 нельзя. А так же чтобы он не увеличивал переменную n в таком случае.

2. Чтобы числа рандомно генерировались от 1 до 10 изначально.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
     int n(0), F;
     cout << "Zagadayte cislo ot 1 do 10\n";
 do {
         cout << "Eto chislo: " << n << "?\n";
         cout << "Vvedite 1 esli rovno, 2 esli bolse, 3 esli menshe: >";
         cin  >> F;
         if(F == 1) {cout << "Ugadal"; break; }
         else if (F == 2) {n=n+2;}
         else if (F == 3) {n=n-1;}
        }
        while (F != 1);
 getch();
 return 0;
}
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
04.11.2011, 00:17     Игра "угадайка" с использованием do while. Ошибка. #11
Цитата Сообщение от mavol Посмотреть сообщение
2. Чтобы числа рандомно генерировались от 1 до 10 изначально.
можно такую функцию сделать:
C++
1
2
3
4
5
6
7
8
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
только надо будет подключить time.h и в начале main() добавить:
C++
1
srand(time(NULL));
в функцию передавать 10.
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 00:26  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #12
Цитата Сообщение от SDmaN Посмотреть сообщение
можно такую функцию сделать:
C++
1
2
3
4
5
6
7
8
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
только надо будет подключить time.h и в начале main() добавить:
C++
1
srand(time(NULL));
в функцию передавать 10.

C++
1
2
3
4
5
6
7
8
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
этот код нужно вставить перед do?
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
04.11.2011, 00:32     Игра "угадайка" с использованием do while. Ошибка. #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
int RandNumber(int n);
 
int main()
{
srand(time(NULL));
     int n(0), F;
     int k;
     cout << "Zagadayte cislo ot 1 do 10\n";
 do {
     k = RandNumber(10); // теперь в k содержится число от 1 до 10
         cout << "Eto chislo: " << n << "?\n";
         cout << "Vvedite 1 esli rovno, 2 esli bolse, 3 esli menshe: >";
         cin  >> F;
         if(F == 1) {cout << "Ugadal"; break; }
         else if (F == 2) {n=n+2;}
         else if (F == 3) {n=n-1;}
        }
        while (F != 1);
 getch();
 return 0;
}
 
 
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 00:37  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #14
Мне надо чтобы "n" изначально сгенерировалось от 1 до 10 и всё.
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
04.11.2011, 00:40     Игра "угадайка" с использованием do while. Ошибка. #15
Цитата Сообщение от mavol Посмотреть сообщение
Мне надо чтобы "n" изначально сгенерировалось от 1 до 10 и всё.
Ну замени k на n. А какой смысл 1 раз? Можно чтобы постоянно генерировал какое то значение и называл. Так интереснее будет.)
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 00:45  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #16
Цитата Сообщение от SDmaN Посмотреть сообщение
Ну замени k на n. А какой смысл 1 раз? Можно чтобы постоянно генерировал какое то значение и называл. Так интереснее будет.)
Да, действительно так интересней, но у меня задача другая.
Мне нужно чтобы использовать в программе вопрос: БОЛЬШЕ или МЕНЬШЕ. И вот я это придумал пока только таким образом.

Я поменял k на n как ты и сказал, но теперь у меня начальное значение всё время 1 почему-то и не генерируется ничего другого.
SDmaN
54 / 51 / 2
Регистрация: 22.07.2011
Сообщений: 436
04.11.2011, 00:49     Игра "угадайка" с использованием do while. Ошибка. #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
int RandNumber(int n);
 
int main()
{
srand(time(NULL));
     int n, F;
     cout << "Zagadayte cislo ot 1 do 10\n";
     n = RandNumber(10);
 do {
         cout << "Eto chislo: " << n << "?\n";
         cout << "Vvedite 1 esli rovno, 2 esli bolse, 3 esli menshe: >";
         cin  >> F;
         if(F == 1) {cout << "Ugadal"; break; }
         else if (F == 2) {n=n+2;}
         else if (F == 3) {n=n-1;}
        }
        while (F != 1);
 getch();
 return 0;
}
 
 
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
Не может быть такого. у меня всё прекрасно работает.
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 01:02  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #18
Цитата Сообщение от SDmaN Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
int RandNumber(int n);
 
int main()
{
srand(time(NULL));
     int n, F;
     cout << "Zagadayte cislo ot 1 do 10\n";
     n = RandNumber(10);
 do {
         cout << "Eto chislo: " << n << "?\n";
         cout << "Vvedite 1 esli rovno, 2 esli bolse, 3 esli menshe: >";
         cin  >> F;
         if(F == 1) {cout << "Ugadal"; break; }
         else if (F == 2) {n=n+2;}
         else if (F == 3) {n=n-1;}
        }
        while (F != 1);
 getch();
 return 0;
}
 
 
int RandNumber(int n)
{
int i;
i = rand() % n;
if(i == 0)
i = 1;
return i;
}
Не может быть такого. у меня всё прекрасно работает.
Теперь действительно работает. Просто частенько мне 1 выкидывает. Спасибо тебе большое!
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
04.11.2011, 01:03     Игра "угадайка" с использованием do while. Ошибка. #19
изучайте и модифицируйте. Правда не понимаю зачем генерировать случайное число. Теоретически мы не знаем что сгенерировалось и не можем быть уверены в правильности программы.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
size_t find(size_t num){
    size_t min = 0, max = 1000000, tmp = 0;
 
    do{
        tmp = max - (max - min) / 2;
 
        if (tmp < num)
            min = min + (max - min) / 2;
        if (tmp > num)
            max = max - (max - min) / 2;
 
    }while(tmp != num);
 
    return tmp;
}
 
int main ()
{
    size_t n;
    do{
        printf ("введите число от 1 до 1000000 включительно\n");
        scanf("%u", &n);
    }while(n > 1000000);
 
    printf("ваше число = %u\n", find(n));
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 01:16     Игра "угадайка" с использованием do while. Ошибка.
Еще ссылки по теме:

C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++
C++ Текстовая игра "Кто хочет стать миллионером?" с использованием классов
Игра "Угадайка" C++
C++ Ошибка "идентификатор "count" не определен"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mavol
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 9
04.11.2011, 01:16  [ТС]     Игра "угадайка" с использованием do while. Ошибка. #20
Цитата Сообщение от alkagolik Посмотреть сообщение
изучайте и модифицируйте. Правда не понимаю зачем генерировать случайное число. Теоретически мы не знаем что сгенерировалось и не можем быть уверены в правильности программы.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
size_t find(size_t num){
    size_t min = 0, max = 1000000, tmp = 0;
 
    do{
        tmp = max - (max - min) / 2;
 
        if (tmp < num)
            min = min + (max - min) / 2;
        if (tmp > num)
            max = max - (max - min) / 2;
 
    }while(tmp != num);
 
    return tmp;
}
 
int main ()
{
    size_t n;
    do{
        printf ("введите число от 1 до 1000000 включительно\n");
        scanf("%u", &n);
    }while(n > 1000000);
 
    printf("ваше число = %u\n", find(n));
 
    return 0;
}
Не совсем ясна суть сообщения. Поясните пожалуйста.
Как я понял код ниже это какая-то интересная генерация чисел. А то, что написано над этим кодом я не совсем понял.
Yandex
Объявления
04.11.2011, 01:16     Игра "угадайка" с использованием do while. Ошибка.
Ответ Создать тему
Опции темы

Текущее время: 20:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru