Написать программу "Угадай число от 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, что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д