«Угадай число» на языке C

Это моя первая программа на C. Есть ли у вас какие-либо улучшения в этой программе? Программа позволяет угадать число, а также возвращает попытки.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
/*
 * Sophie
 * 21.03.2021
 */
void main() {
     int secret;
     int guess;
     int try = 1;

    time_t t;
    srand((unsigned ) time(&t));
    secret = rand() % 100+1;

    printf("Please Enter value:n");
    scanf("%i", &guess);

    while (guess != secret){
        if (guess > secret)
            printf("Guess too high. n");
        else
            printf("Guess too low. n");

        printf("Please enter a new value:n");
        scanf("%i", &guess);
        try++;
    }
    printf("You gussed the number! n");
    printf("You needed %i Tries.", try);

    getch();
}

3 ответа
3

Программа тоже понравилась — не компилировалась, но поправить несложно — какие <conio> и getch()?

Я наслаждался парой игр, пока не подумал, что это 0-99 или 1-100. Расстояние между % 100+1 немного вводил в заблуждение.

Я упростил time() вызов.

Тогда я задался вопросом, почему есть два scanf() звонки. Сообщения ввода разные (введите / введите NEW), но сам ввод такой же. Итак, я закончил с while(scanf() > 0).

Не очень понятно, что ставить в то время. Также что делать с неверным вводом. Моя версия останавливается и выводит количество попыток.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* modified number guessing game, with while(scanf()) loop */
/* original by Sophie 21.03.2021 */

void main() {
    int secret, guess;
    int try = 0;
    srand(time(NULL));
    secret = rand() % 100 + 1;

    printf("Please enter first guess (1-100):n");

    while (scanf("%i", &guess) > 0) {
        try++;
        if (guess == secret) {
            printf("You guessed the number!n");
            break;
        }
        if (guess > secret)
            printf("Guess too high. ");
        else
            printf("Guess too low. ");

        printf("Please enter a new value:n");
    }

    printf("You tried %i times.n", try);
}

Боюсь, тебе придется пожертвовать этим милым

while (guess != secret) {

и сконцентрируйтесь на scanf () возвращаться.

(Хорошо с этим отрицанием != это было даже не так уж и здорово — больше похоже на «застрял в вечной петле, пока догадки не верны»)

  • 2

    Расстояние между % 100+1 немного вводил в заблуждение не исправляйте это пробелами, используйте фигурные скобки: secret = (rand() % 100) + 1;

    — Пол Эванс

  • @PaulEvans Я бы назвал эти скобки, круглые скобки, круглые скобки или скобки; фигурные скобки — { и } — и имеют совсем другое значение в большинстве языков программирования! Но да, как бы вы их ни называли, они полезны для уточнения приоритета. Этот случай немного субъективен; Я бы рассмотрел % достаточно похоже на деление, чтобы приоритет был уже очевиден — но если это не очевидно для вас, во что бы то ни стало используйте скобки.

    — гидды

  • Ваша версия по-прежнему не компилируется (ошибка: недопустимый прототип для основной функции).

    — Конрад Рудольф

  • @gidds Я должен был найти его и использовать скобки, круглые скобки, или же первые скобки но я думаю, что эту идею ясно передает пример. И не считать% достаточно похожим на деление, чтобы приоритет был уже очевиден использовать круглые скобки сделать ваш код совершенно ясно! Будьте добры к своим читателям и к себе в будущем, сделайте чтение кода максимально простым.

    — Пол Эванс


  • void main это действительно плохая привычка. Это должен быть int main.

  • Всегда проверяйте, что scanf возвращается. Например, попробуйте ввести нечисловой ввод и увидите, как ваша программа входит в бесконечный цикл.

  • Избегать conio.h (и поэтому getch). Он очень непереносимый.

  • Стоит упомянуть, почему void main плохая привычка. Не думаю, что хорошо говорить кому-то о том, что что-то не так, не объясняя почему. (Я считаю, что причина в том, что это недействительный код C, хотя некоторые компиляторы игнорируют его и все равно компилируют, но я могу ошибаться.)

    — Ответь на мой вопрос


Выглядит неплохо для первой программы на C, хорошая работа.

Хорошим улучшением было бы попросить человека вставить число, которое будет максимальным числом, которое нужно угадать (вместо значения по умолчанию 100).

также вы можете изменить имя переменной «try» на «пытается».

Я думаю, есть аргументы как в пользу try (что имеет больше смысла в цикле) и tries (что лучше читается ниже). (Я мог бы выбрать tries я, но, вероятно, из моего опыта работы с такими языками, как Java и Kotlin, где try — ключевое слово, которое здесь явно не применяется!)

— гидды

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *