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