我们将创建一个程序,它可以:

(图片来源网络,侵删)
- 提示用户输入一个名字。
- 读取用户输入的名字。
- 将名字转换为首字母大写的形式("stephen" -> "Stephen")。
- 向用户打印出个性化的欢迎信息。
下面我将分步讲解如何实现这个程序,并提供完整的代码。
第1步:理解核心概念
在写代码之前,我们先明确需要用到的 C 语言知识点:
#include <stdio.h>: 这是标准输入输出库,包含了我们用来打印信息(printf)和读取输入(scanf)的函数。char类型: 用于存储单个字符,一个字符串在 C 中实际上是一个由char类型组成的字符数组,以一个特殊的空字符'\0'char name[50]: 这声明了一个可以容纳最多 49 个字符 + 1 个空字符'\0'的字符数组,用来存储用户的名字。printf(): 用于在屏幕上显示文本。scanf(): 用于从键盘读取输入。"%s"是格式说明符,表示读取一个字符串。strlen(): 一个非常有用的函数,用于计算字符串的长度(不包括结尾的'\0'),它需要包含<string.h>头文件。toupper(): 一个函数,用于将单个小写字母转换为大写字母,它需要包含<ctype.h>头文件。for循环: 用于遍历字符串中的每一个字符。if条件语句: 用于进行判断。
第2步:编写完整代码
这是完整的 C 语言程序,你可以直接复制它到一个名为 stephen.c 的文件中。
// 引入必要的头文件
#include <stdio.h> // 用于 printf 和 scanf
#include <string.h> // 用于 strlen
#include <ctype.h> // 用于 toupper
// 定义一个常量,表示名字数组的最大长度
#define MAX_NAME_LENGTH 50
int main() {
// 1. 声明一个字符数组来存储用户的名字
char name[MAX_NAME_LENGTH];
// 2. 提示用户输入名字
printf("请输入你的名字: ");
// 3. 读取用户输入的名字
// scanf 会读取用户输入直到遇到空格或换行符
// %49s 是一个安全措施,防止用户输入超过数组大小
scanf("%49s", name);
// 4. 将名字转换为首字母大写
// 检查名字是否为空字符串(虽然 scanf 通常不会读入空字符串)
if (strlen(name) > 0) {
// 将第一个字符转换为大写
// toupper() 函数只处理字母,非字母字符不受影响
name[0] = toupper(name[0]);
// 从第二个字符开始,将所有字符转换为小写
// 使用 for 循环遍历字符串
for (int i = 1; i < strlen(name); i++) {
name[i] = tolower(name[i]);
}
}
// 5. 打印个性化的欢迎信息
printf("你好, %s! 欢迎来到 C 语言的世界,\n", name);
// 程序正常结束
return 0;
}
第3步:代码逐行解释
让我们详细分解上面的代码:

(图片来源网络,侵删)
#include <stdio.h> #include <string.h> #include <ctype.h>
这三行告诉编译器,我们需要使用标准输入输出、字符串处理和字符处理这三个标准库中的函数。
#define MAX_NAME_LENGTH 50
这是一个宏定义,它创建一个名为 MAX_NAME_LENGTH 的常量,值为 50,这样做的好处是,如果你以后想把名字的最大长度改成 100,只需要修改这一行,而不需要在整个程序中查找并替换所有 50,这是一个很好的编程习惯。
int main() {
这是所有 C 程序的入口点,程序从这里开始执行。
char name[MAX_NAME_LENGTH];
这里我们创建了一个字符数组 name,它可以存储最多 49 个字符,加上一个自动添加的结尾空字符 '\0'。

(图片来源网络,侵删)
printf("请输入你的名字: ");
printf 函数在屏幕上显示引号内的文本,提示用户该做什么。
scanf("%49s", name);
scanf 函数等待用户从键盘输入。
%s告诉scanf读取一个字符串。49是一个重要的安全措施,它告诉scanf最多读取 49 个字符,为字符串结尾的'\0'预留空间,从而防止“缓冲区溢出”(Buffer Overflow)这种严重的安全漏洞。
if (strlen(name) > 0) {
strlen(name) 获取 name 字符串的长度。if 语句检查这个长度是否大于 0,确保我们只在用户确实输入了内容时才进行转换。
name[0] = toupper(name[0]);
这是转换的关键步骤。
name[0]指的是字符串中的第一个字符(在 C 中,数组索引从 0 开始)。toupper()函数将这个字符转换为大写,如果用户输入了 "stephen",name[0]原本是 's',现在变成了 'S'。
for (int i = 1; i < strlen(name); i++) {
name[i] = tolower(name[i]);
}
这个 for 循环处理字符串的其余部分。
int i = 1: 循环从第二个字符(索引为 1)开始。i < strlen(name): 循环继续,直到i到达字符串的末尾。name[i] = tolower(name[i]): 循环体内的代码将当前字符name[i]转换为小写。
printf("你好, %s! 欢迎来到 C 语言的世界,\n", name);
这行代码再次使用 printf 来显示欢迎信息。
%s是一个占位符,printf会用变量name的实际值来替换它。\n是一个换行符,它会让光标移动到下一行,使输出更整洁。
return 0; }
return 0; 表示 main 函数执行成功,并将值 0 返回给操作系统,在 main 函数中,return 0 是一个约定俗成的做法,表示程序正常退出。
第4步:如何编译和运行
假设你已经安装了 C 语言编译器(GCC),可以按照以下步骤操作:
- 保存代码: 将上面的代码保存为
stephen.c。 - 打开终端/命令提示符: 导航到你保存文件的目录。
- 编译代码: 在终端中输入以下命令并按回车。
gcc stephen.c -o stephen
gcc是编译器的命令。stephen.c是你的源文件名。-o stephen指定输出的可执行文件名为stephen(在 Windows 上是stephen.exe)。
- 运行程序: 编译成功后,输入以下命令并按回车。
./stephen
你将看到如下交互:
请输入你的名字: stephen
你好, Stephen! 欢迎来到 C 语言的世界。
或者,如果你输入 "JoHn":
请输入你的名字: JoHn
你好, John! 欢迎来到 C 语言的世界。
这个 "Stephen" 程序是一个很好的起点,它综合运用了基础 C 语言知识,并且能给你带来即时的、有意义的反馈,祝你编程愉快!
