Написать программу "Угадай число от 0 до 100" без использования глобальных переменных - C (СИ)
Формулировка задачи:
Задача передо мной стояла следующая: написать программу "Угадай число от 0 до 100" без использования глобальных переменных.
У меня получилось вот что:
Теперь ругается на использование переменной secret_num до её инициализации, но после нажатия "продолжить" дважды прога работает, как надо. Что подскажете?
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUMBER 100
void in_num_gen(); // инициализация генератора случайных чисел
int ch_new_secret_num (int secret_num); // выбор случайного числа от 1 до MAX_NUMBER
void read_guesses(); // чтение и обработка попыток пользователя
int main()
{
int secret_num;
char command;
setlocale(LC_ALL, "Rus");
printf("Угадайте число от 1 до %d \n", MAX_NUMBER);
in_num_gen();
do
{
ch_new_secret_num (secret_num);
printf("Число загадано \n");
read_guesses();
printf("Играть ещё раз? (y|n) ");
scanf_s(" %c", &command);
printf("\n");
}
while(command == 'y' || command == 'Y');
return 0;
}
void in_num_gen()
{
srand(time(0));
}
int ch_new_secret_num(int secret_num)
{
return secret_num = rand()%MAX_NUMBER+1;
}
void read_guesses()
{
int secret_num = ch_new_secret_num(secret_num);
int guess, num_guesses=0;
for(;;)
{
num_guesses++;
printf("Введите целое число: ");
scanf("%d", &guess);
if(guess == secret_num)
{
printf("Вы угадали за %d попыток! \n", num_guesses);
return;
}
else if(guess < secret_num)
printf("Введённое число меньше загаданного, попробуйте ещё раз \n");
else
printf("Введённое число больше загаданного, попробуйте ещё раз \n");
}
}Решение задачи: «Написать программу "Угадай число от 0 до 100" без использования глобальных переменных»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUMBER 100
void in_num_gen(); // инициализация генератора случайных чисел
int ch_new_secret_num (int secret_num); // выбор случайного числа от 1 до MAX_NUMBER
void read_guesses(); // чтение и обработка попыток пользователя
int main()
{
int secret_num;
char command;
setlocale(LC_ALL, "Rus");
printf("Угадайте число от 1 до %d \n", MAX_NUMBER);
in_num_gen();
do
{
printf("Число загадано \n");
read_guesses();
printf("Играть ещё раз? (y|n) ");
scanf_s(" %c", &command);
printf("\n");
}
while(command == 'y' || command == 'Y');
return 0;
}
void in_num_gen()
{
srand(time(0));
}
int ch_new_secret_num(int secret_num)
{
return secret_num = rand()%MAX_NUMBER+1;
}
void read_guesses()
{
int secret_num=0;
int guess, num_guesses=0;
secret_num = ch_new_secret_num(secret_num);
for(;;)
{
num_guesses++;
printf("Введите целое число: ");
scanf("%d", &guess);
if(guess == secret_num)
{
printf("Вы угадали за %d попыток! \n", num_guesses);
return;
}
else if(guess < secret_num)
printf("Введённое число меньше загаданного, попробуйте ещё раз \n");
else
printf("Введённое число больше загаданного, попробуйте ещё раз \n");
}
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, locale.h, stdlib.h, time.h
- Определяется максимальное число, которое может быть угадано - MAX_NUMBER (100)
- Объявляются функции: in_num_gen(), ch_new_secret_num(), read_guesses()
- В функции main() инициализируется генератор случайных чисел, устанавливается локальная система символов на русскую, выводится приглашение к игре
- Запускается цикл do-while, который продолжается до тех пор, пока пользователь не введет 'n' или 'N' для выхода из игры
- Внутри цикла выводится сообщение о том, что число уже угадано, и происходит чтение и обработка попыток пользователя
- После каждой неудачной попытки пользователю выводится сообщение об ошибке
- Функция read_guesses() читает и обрабатывает введенные пользователем числа
- В этой функции используется цикл for(;;), который продолжается до тех пор, пока пользователь не угадает число
- Если пользователь угадывает число, выводится сообщение об успехе
- Если пользователь вводит число, которое больше или меньше загаданного, выводится соответствующее сообщение об ошибке
- Функция read_guesses() возвращает управление в функцию main() после каждой успешной или ошибочной итерации цикла
- В конце функции main() возвращается 0, что означает успешный конец работы программы