C 语言入门 Day 2:处理多种输入类型 —— 字符串与整数

在千问的帮助下
目标:编写一个能同时询问用户姓名和登机口编号的 C 程序
核心知识点:char[]intscanf 格式符匹配、& 取地址符
环境:Windows + VS Code + GCC (MSYS2 UCRT64)


🧩 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
char name[50];
int gate;

printf("Passenger name? ");
scanf("%s", name);

printf("Boarding gate? ");
scanf("%d", &gate);

printf("\n--- BOARDING PASS ---\n");
printf("Name: %s\n", name);
printf("Gate: %d\n", gate);

return 0;
}

🔍 逐行解析

1. char name[50];

作用:声明一个字符串变量,用于存储乘客姓名
关键点:最多存 49 个字符 + 1 个结束符 \0

2. int gate;

作用:声明一个整数变量,用于存储登机口编号
关键点:int 类型只能存整数(不能存小数或字母)

3. scanf("%s", name);

作用:读取一个单词(不含空格)存入 name
注意:数组名 name 本身代表地址,不需要加 &

4. scanf("%d", &gate);

作用:读取一个整数存入 gate
注意:普通变量 gate 必须加 & 才能传地址
⚠️ 常见错误:写成 scanf("%s", &gate) → 导致读取失败,输出垃圾值

5. printf("Gate: %d\n", gate);

作用:输出整数值
格式说明:%d 是整数的占位符,必须与 int 类型匹配


🧠 关于 & 的简单理解

  • name 是“一排盒子”(数组),直接告诉 scanf 起始位置
  • gate 是“一个盒子”(普通变量),需要用 &gate 告诉 scanf 它在哪
    💡 千问说:现在先记住规则,指针课会彻底讲透!

🧪 特殊输入测试

用户输入 实际读取值 原因
12A 12 遇非数字 A 立即停止
23.5 23 遇小数点 . 停止
-5 -5 负号被识别为整数一部分
abc 未定义(可能为 0 或随机值) 无数字可读

✅ 这是 C 语言的标准行为,不是程序错误!


🛠 编译与运行命令

1
2
3
4
### 编译:
gcc flight_checkin.c -o checkin
### 运行:
./checkin

✅ 预期输出:

1
2
3
4
5
Passenger name? TangShiMei
Boarding gate? 26
--- BOARDING PASS ---
Name: TangShiMei
Gate: 26

小结一下

✅ char[] 存储字符串

✅ int 存储整数

✅ scanf(“%s”, name) 正确读取姓名

✅ scanf(“%d”, &weight) 正确读取重量 ,里面的 & 不要忘记!!

✅ printf 格式化输出清晰美观


❌ 常见错误与解决

错误现象 原因 修复方法
输出 Gate: 13874 %sint 变量 改为 scanf("%d", &gate);
程序不等待输入 项目路径含中文/特殊符号 使用纯英文路径(如 D:\c_practice
登机口显示为 0 输入了非数字内容 提示用户输入纯数字

💡 学习建议

  • 自己敲代码,不要复制粘贴 —— 手动输入能强化记忆
  • 故意制造错误(如 %s 读整数),观察报错
  • 项目路径用纯英文 —— 避免 MSYS2/GCC 的隐藏坑
  • 测试异常输入(字母、小数)—— 培养健壮性思维

📅 下一步可以学

  • 使用 if 判断登机口是否在有效范围(1~30)
  • 用循环实现“输错重新输入”
  • 初步接触输入验证逻辑

结束之小练习

🎯 练习题目:机场行李托运登记系统

任务:编写一个 C 程序 baggage_check.c,完成以下功能:
询问乘客姓名(字符串)
询问行李重量(整数,单位:公斤)
打印行李标签,包含姓名和重量

代码示例👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>

int main() {
char name[50];
int weight;

printf("Passeger name?\n");
scanf("%s",name);

printf("What's your baggage weight(kg)? \n");
scanf("%d",&weight);

printf("Passenger: %s\n",name);
printf("Baggage weight: %d kg\n",weight);
return 0;

}

这里是千问的话👇
记住:今天你不仅学会了处理两种数据类型,
更开始思考“用户会怎么乱输”——
这正是从“写代码”走向“做产品”的第一步。
继续加油!✈️💪