Написать программу "Угадай число от 0 до 100" без использования глобальных переменных - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача передо мной стояла следующая: написать программу "Угадай число от 0 до 100" без использования глобальных переменных. У меня получилось вот что:
#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");
    }
}
Теперь ругается на использование переменной secret_num до её инициализации, но после нажатия "продолжить" дважды прога работает, как надо. Что подскажете?

Решение задачи: «Написать программу "Угадай число от 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");
    }
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, locale.h, stdlib.h, time.h
  2. Определяется максимальное число, которое может быть угадано - MAX_NUMBER (100)
  3. Объявляются функции: in_num_gen(), ch_new_secret_num(), read_guesses()
  4. В функции main() инициализируется генератор случайных чисел, устанавливается локальная система символов на русскую, выводится приглашение к игре
  5. Запускается цикл do-while, который продолжается до тех пор, пока пользователь не введет 'n' или 'N' для выхода из игры
  6. Внутри цикла выводится сообщение о том, что число уже угадано, и происходит чтение и обработка попыток пользователя
  7. После каждой неудачной попытки пользователю выводится сообщение об ошибке
  8. Функция read_guesses() читает и обрабатывает введенные пользователем числа
  9. В этой функции используется цикл for(;;), который продолжается до тех пор, пока пользователь не угадает число
  10. Если пользователь угадывает число, выводится сообщение об успехе
  11. Если пользователь вводит число, которое больше или меньше загаданного, выводится соответствующее сообщение об ошибке
  12. Функция read_guesses() возвращает управление в функцию main() после каждой успешной или ошибочной итерации цикла
  13. В конце функции main() возвращается 0, что означает успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы