Linux中國

通過編寫一個簡單的遊戲學習 C 語言

我在小學時就開始 自學編程。我的第一個程序是在 Apple II 上編寫的,但最終,我還是通過看書和編程練習學會了 C 語言。練習編程的最佳方法是編寫示常式序,它能幫助你練習新知識。

在我學習一種新的編程語言時,我喜歡編寫一個簡單的「猜數字」遊戲來練習。電腦從 1 到 100 中隨機挑選一個數字,你必須通過猜測來算出來。在另一篇文章中,我展示了如何用 Bash 語言編寫這個「猜數字」遊戲,我的同事也寫了一些文章,介紹如何用 JavaJulia 和其他計算機語言編寫它。

猜數字」遊戲的偉大之處在於它踐行了幾個編程概念:如何使用變數、如何比較值、如何列印輸出以及如何讀取輸入。

整個夏天,我錄製了一個系列視頻,教人們如何用 C 語言編寫程序。從那以後,我聽到了很多人都在跟著它學習 C 語言編程的消息。所以,我想接著用 C 語言寫一個「猜數字」的遊戲。

去取一個隨機數

從寫一個函數來選擇一個隨機數字來開始「猜數字」遊戲。在編寫函數時,優秀的程序員會盡量使它們具有靈活性,這樣他們就可以重用它們來解決略有不同的問題。因此,與其硬編碼函數來選擇 1 到 100 之間的一個隨機數,不如編寫函數來選擇 1 到某個整數 maxval 之間的一個隨機數:

#include <stdio.h>
#include <sys/random.h>

int
randnum(int maxval)
{
  /* pick a random number from 1 to maxval */

  int randval;

  getrandom(&randval, sizeof(int), GRND_NONBLOCK);

  /* could be negative, so ensure it&apos;s positive */

  if (randval < 0) {
    return (-1 * randval % maxval + 1);
  }
  else {
    return (randval % maxval + 1);
  }
}

該函數使用 Linux 的系統調用 getrandom 來生成一系列隨機數。你可以在手冊頁中了解關於這個系統調用的更多信息,但請注意,getrandom 將用隨機的 0 和 1 填充變數。這意味著最終值可以是正的,也可以是負的,因此你需要在之後進行測試,以確保 randnum 函數的結果是正值。

編寫程序

你可以用這個函數來寫你的「猜數字」程序:

#include <stdio.h>
#include <sys/random.h>

int
randnum(int maxval)
{
  ...
}

int
main(void)
{
  int number;
  int guess;

  number = randnum(100);

  puts("Guess a number between 1 and 100");

  do {
    scanf("%d", &guess);

    if (guess < number) {
      puts("Too low");
    }
    else if (guess > number) {
      puts("Too high");
    }
  } while (guess != number);

  puts("That&apos;s right!");

  return 0;
}

程序首先使用 randnum 函數從 1 到 100 之間選擇一個隨機數。在向用戶輸出一個提示後,程序進入一個 do-while 循環,以便用戶可以猜測數字。

在循環的每次迭代中,程序測試用戶的猜測的數值。如果用戶的猜測小於隨機數,程序將輸出「Too low」,如果猜測大於隨機數,程序將輸出「Too high」。循環繼續,直到用戶的猜測與隨機數相同。

當循環退出時,程序輸出 「That's right!」,然後立即結束:

$ gcc -o guess -Wall guess.c

$ ./guess
Guess a number between 1 and 100
50
Too high
30
Too low
40
Too low
45
Too high
42
Too low
43
Too low
44
That&apos;s right!

嘗試動手

在學習一門新的編程語言時,這個「猜數字」遊戲是一個很好的入門程序,因為它以一種非常直接的方式練習了幾個常見的編程概念。通過用不同的編程語言實現這個簡單的遊戲,你可以演示一些核心概念,並比較每種語言的細節。

你有最喜歡的編程語言嗎?你會如何用它來編寫「猜數字」遊戲呢?關注本系列文章,查看你可能感興趣的其他編程語言的示例。

via: https://opensource.com/article/21/1/learn-c

作者:Jim Hall 選題:lujun9972 譯者:qfzy1233 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國