# C - 输入用户: 初学者的指南

你好,未来的程序员们!今天,我们将进入C编程中用户输入的精彩世界。作为你友好的邻居计算机老师,我将引导你完成这个旅程,一步一步。所以,拿一杯咖啡(或者你最喜欢的饮料),让我们开始吧!

## 为什么我们需要在C中获取用户输入?

想象一下,你正在创建一个计算器程序。如果它只能加2和2,那将是非常无用的,对吧?这就是用户输入的用武之地!用户输入使我们的程序能够动态和交互。我们的程序不再是总是做同样的事情,而是可以根据不同的输入产生不同的结果。

## 魔法棒:scanf() 函数

在C中,我们捕获用户输入的魔法棒是`scanf()`函数。它就像一个捕捉用户输入到程序中的信息的网。让我们分解一下:

```c
#include <stdio.h>

int main() {
    int number;
    printf("Enter a number: ");
    scanf("%d", &number);
    printf("You entered: %d\n", number);
    return 0;
}

在这个例子中:

C - User Input

  1. 我们声明了一个名为numberint变量。
  2. 我们提示用户输入一个数字。
  3. 我们使用scanf()来捕获输入并将其存储在number中。
  4. 最后,我们将数字打印回给用户。

scanf()中的%d就像告诉函数:“嘿,这里期望一个整数!”number前的&表示:“在 这个内存地址存储输入。”

输入类型:让我们探索!

整数输入

我们已经看到了如何输入整数。让我们尝试一个更复杂的例子:

#include <stdio.h>

int main() {
    int age, year;
    printf("Enter your age and birth year: ");
    scanf("%d %d", &age, &year);
    printf("You are %d years old and were born in %d.\n", age, year);
    return 0;
}

在这里,我们一次捕获了两个整数!%d %d之间的空格告诉scanf()期望输入之间有一个空格或换行符。

浮点数输入

如果我们想要小数呢?进入浮点数!

#include <stdio.h>

int main() {
    float height, weight;
    printf("Enter your height (m) and weight (kg): ");
    scanf("%f %f", &height, &weight);
    printf("You are %.2f meters tall and weigh %.1f kg.\n", height, weight);
    return 0;
}

注意浮点数使用%f。在输出中,.2f.1f控制小数位数。

字符输入

有时,我们只需要一个字符:

#include <stdio.h>

int main() {
    char grade;
    printf("Enter your grade (A-F): ");
    scanf(" %c", &grade);  // 注意%c前的空格
    printf("You got a %c. ", grade);

    if (grade == 'A' || grade == 'B')
        printf("Great job!\n");
    else if (grade == 'C')
        printf("Not bad, keep improving!\n");
    else
        printf("Let's work harder next time!\n");

    return 0;
}

%c前的空格非常重要!它告诉scanf()跳过任何空白(如换行符)然后读取字符。

字符串输入

最后但同样重要的是,让我们捕获整个字符串:

#include <stdio.h>

int main() {
    char name[50];  // 用于存储字符串的数组
    printf("What's your name? ");
    scanf("%49s", name);  // %49s以防止缓冲区溢出
    printf("Hello, %s! Welcome to C programming!\n", name);
    return 0;
}

需要注意以下几点:

  1. 我们使用字符数组来存储字符串。
  2. scanf()name前没有&,因为数组名已经是地址。
  3. %49s限制输入为49个字符,防止缓冲区溢出。

scanf()函数:更深入的了解

让我们总结一下我们所看到的不同的格式说明符:

格式说明符 数据类型
%d 整数
%f 浮点数
%c 字符
%s 字符串

记住,scanf()很强大但可能有点棘手。总是检查输入是否成功:

#include <stdio.h>

int main() {
    int num;
    printf("Enter a number: ");
    if (scanf("%d", &num) == 1) {
        printf("You entered: %d\n", num);
    } else {
        printf("Invalid input!\n");
    }
    return 0;
}

这检查scanf()是否成功读取了一个值(== 1)。

结束语

哇!我们今天涵盖了很多内容。从整数到字符串,我们探索了如何使我们的C程序交互。记住,熟能生巧。尝试在你的程序中结合不同类型的输入。也许创建一个简单的游戏,询问玩家的名字、年龄和最喜欢的数字?

编程就像学习一门新语言 - 使用得越多,就越自然。所以,继续编码,继续尝试,最重要的是,享受乐趣!如果你遇到困难,记住每个程序员都曾是初学者。不要害怕提问和寻求帮助。

下次见,快乐编码!

Credits: Image by storyset