C Day 1
C Day 1
在千问的帮助下
目标:编写一个能询问用户姓名并打招呼的 C 程序
核心知识点:#include、printf、scanf、字符数组(字符串变量)
环境:Windows + VS Code + GCC (MSYS2 UCRT64)
🧩 完整代码
1 |
|
🔍 逐行解析
1. #include <stdio.h>
- 作用:引入标准输入输出库(Standard Input/Output)
- 为什么需要?
C 语言本身不包含printf和scanf,它们定义在stdio.h头文件中。 - 类比:就像手机要装“微信”才能发消息,程序要
#include才能用这些功能。
2. int main() { ... }
- 作用:程序的入口点(所有 C 程序从这里开始执行)
int表示:函数返回一个整数(通常return 0表示成功)
3. char name[50];
- 作用:声明一个能存储最多 50 个字符的字符串变量,名为
name - 关键概念:
char:字符类型(可存字母、数字、符号等)[50]:数组大小(C 中字符串必须预先分配空间)- 注意:实际最多存 49 个字符 + 1 个结束符
\0
💡 千问说我们小白可以理解为:“创建一个叫
name的盒子,最多装 50 个字。”
4. printf("What's your name? ");
- 作用:向屏幕输出文字
- 格式说明:
- 普通文本直接写在双引号内
\n表示换行(本例未加,所以光标停在问号后)
5. scanf("%s", name);
- 作用:从键盘读取一个单词(不含空格),存入
name - 参数详解:
"%s":格式说明符,表示“读一个字符串”name:变量名(数组名不需要加&)
- ⚠️ 注意事项:
- 遇到空格、回车即停止(不能读带空格的名字)
- 不会自动清空缓冲区(后续课程会讲更安全的输入方式)
6. printf("Hello, %s!\n", name);
- 作用:输出包含变量值的句子
%s的含义:- 是一个“占位符”,会被后面的
name变量内容替换 - 必须与传入的变量类型匹配(字符串 →
%s)
- 是一个“占位符”,会被后面的
✅ 正确:
printf("Hi %s", name);
❌ 错误:printf("Hi #s", name);(#s不是占位符!)
7. return 0;
- 作用:告诉操作系统“程序成功结束”
- 约定:
0= 成功,非0= 出错
🛠 编译与运行命令
在项目目录的终端中执行:
1 | # 编译:将 .c 源文件转为 .exe 可执行文件 |
✅ 预期输出:
1 | What's your name? TangShiMei |
❌ 常见错误与解决
| 错误现象 | 原因 | 修复方法 |
|---|---|---|
error: implicit declaration of function 'print' |
写了 print 而不是 printf |
改为 printf |
输出 Hello, #s! |
格式串写成 "#s" |
改为 "%s" |
输出 Hello, ;! |
scanf 参数写错,如 scanf("%s,name") |
改为 scanf("%s", name) |
| 中文乱码 | 终端编码与源文件编码不一致 | 暂时用英文;或终端执行 chcp 65001 切 UTF-8 |
💡 学习建议
- 自己敲代码,不要复制粘贴 —— 手动输入能强化记忆
- 故意制造错误,观察报错 —— 这是理解语法的最佳方式
- 项目路径用纯英文(如
D:\c_practice)—— 避免特殊字符引发奇怪问题 - 每次只改一行,立刻测试 —— 小步快跑,快速反馈
📅 下一步可以学
- 添加第二个变量(如
city) - 使用
if判断名字是否为特定值 - 用循环让程序持续运行
这里是千问的话👇
记住:每个程序员都曾卡在printf和scanf上。
你能走到这里,已经超越了昨天的自己。继续加油!💪
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 TangShiMei的小空间!
评论






