01_C语言学习路线与开发环境搭建

C语言学习路线与开发环境搭建

一、本篇文章要解决什么问题

你可能是第一次接触编程,或者从其他语言转过来想学 C 语言。不管哪种情况,摆在面前的第一个问题都是:从哪开始?

这篇文章就帮你解决三个最实际的问题:

  1. C 语言到底能干什么,值不值得花时间学?
  2. 怎么在 Windows 上把 C 语言开发环境搭起来?
  3. 怎么写一个最简单的 C 程序,把它跑起来?

学完这篇,你的电脑上就有一个能用的 C 语言开发环境,而且你能自己写出并运行第一个程序。后面的所有文章,都建立在这个环境之上。


二、先用一个简单例子理解

很多教程一上来就讲 C 语言的历史、讲计算机组成原理。咱们换个方式------先看一个生活化的类比。

写 C 程序就像做一道菜:

  1. 你得有一个厨房(开发环境,比如 Visual Studio)
  2. 你得写一份菜谱(源代码,.c 文件)
  3. 你得把菜谱给厨师,厨师把它做成菜(编译,编译器把 .c 变成 .exe)
  4. 你品尝这道菜(运行程序

这篇文章要做的事就是:帮你把"厨房"搭好,然后带你做第一道"菜"------一个在屏幕上显示 "Hello, C Language!" 的程序。

当你看到屏幕上出现这行字的时候,就说明整个"厨房→菜谱→做菜→品尝"的流程全通了。


三、核心知识点讲解

3.1 C 语言适合什么人学

如果你是以下情况之一,C 语言非常适合你:

  • 大学正在上 C 语言课,需要系统地学会并考试
  • 想学单片机、嵌入式开发(这些领域 C 语言是绝对主力)
  • 想打牢编程基础,以后学其他语言更快
  • 准备考研,数据结构要用 C 语言描述
  • 对计算机底层原理感兴趣,想搞清楚内存到底是怎么回事

那 C 语言不适合什么情况呢?

  • 你想两星期速成然后去找工作------C 语言没有那种"拖拽控件就能出界面"的开发方式
  • 你想做网页前端------那应该学 HTML/CSS/JavaScript
  • 你想做数据分析/AI------Python 上手更快

C 语言的核心价值在于:它让你离计算机更近,让你理解程序底层到底是怎么运行的。

3.2 本专栏完整学习路线

我把整个学习过程分成了 5 个阶段,总共 20 篇文章:

text 复制代码
第一阶段(入门基础):第 1~4 篇
  环境搭建 → 数据类型 → 输入输出 → 运算符

第二阶段(流程控制与基础数据结构):第 5~8 篇
  分支结构 → 循环结构 → 数组 → 字符串

第三阶段(函数与指针核心):第 9~14 篇
  函数 → 递归 → 指针入门 → 指针与数组 → 函数指针 → 字符串指针

第四阶段(结构体与高级语法):第 15~17 篇
  结构体联合枚举 → 作用域存储类别 → 预处理多文件

第五阶段(综合进阶):第 18~20 篇
  文件操作 → 位操作与动态内存 → 综合项目实战

学习建议:

  • 如果你是零基础,按顺序学,不要跳
  • 如果你学过一点,第三阶段的指针是重点,一定要认真看
  • 每篇文章后面的练习题一定要动手做,光看是学不会编程的

图1-1 C 语言学习路线图:让读者对整体学习路径有直观认识。

3.3 安装 Visual Studio 社区版

在 Windows 上写 C 语言,推荐使用 Visual Studio 2022 社区版。它是微软官方的集成开发环境(IDE),免费,功能完整,而且安装后就自带 C 语言编译器。

安装步骤:

  1. 打开浏览器,搜索 "Visual Studio 2022 Community 下载",进入微软官网
  2. 下载安装程序,双击运行
  3. 在"工作负荷"选择界面,勾选 "使用 C++ 的桌面开发"(注意:这个选项虽然名字叫 C++,但它同时包含 C 语言的编译工具)
  4. 点击"安装",等待下载完成(大约需要 6~8 GB 空间,耗时取决于网速)
  5. 安装完成后,可以选择以后登录,直接跳过

常见问题 :为什么选"使用 C++ 的桌面开发"而不是别的?因为 C 语言和 C++ 共用同一套编译工具链,这个选项里的 MSVC 编译器既支持 C++ 也支持 C 语言。你只要在新建文件时把后缀写成 .c,编译器就会自动按 C 语言的规则来编译。

图1-2 Visual Studio 安装关键步骤:帮助读者准确勾选必要组件,避免安装后无法编译。

3.4 创建第一个 C 语言项目

  1. 打开 Visual Studio,点击"创建新项目"
  2. 在模板列表中找到 "空项目"(或者搜索"空项目"),选中它,点击"下一步"
  3. 给项目起个名字,比如 CLearning,选择保存位置,点击"创建"
  4. 在右侧"解决方案资源管理器"中,右键点击"源文件" → "添加" → "新建项"
  5. 选择"C++ 文件(.cpp)",然后把文件名改成 hello.c注意:后缀必须是 .c,不能是 .cpp,否则编译器会按 C++ 规则处理
  6. 点击"添加"

3.5 C 程序的基本结构

一个最简单的 C 程序长这样:

c 复制代码
#include <stdio.h>

int main(void)
{
    printf("Hello, C Language!\n");
    return 0;
}

逐行解释一下(后面文章会展开讲):

  • #include <stdio.h> ------ 告诉编译器:我要用到标准输入输出库里面的东西。printf 就来自这个库。
  • int main(void) ------ 这是程序的"入口"。程序启动后,从这里开始执行。int 表示这个函数返回一个整数。
  • {} ------ 一对大括号把函数的内容包起来,这叫"函数体"。
  • printf("Hello, C Language!\n"); ------ 在屏幕上打印一行文字。\n 是换行符,相当于在文字末尾敲了一个回车。
  • return 0; ------ 程序正常结束,返回 0 给操作系统。

每个分号都不能少! C 语言用分号表示一条语句的结束,忘了写分号编译器会报错。

图1-3 C 程序从编写到运行的完整流程:让初学者理解"编译运行"这四个字背后到底发生了什么。

3.6 运行你的程序

两种方式:

  • 方式一(推荐) :按 Ctrl + F5(不调试运行)。程序运行完后会自动暂停,显示"按任意键继续...",方便你看到输出结果。
  • 方式二 :按 F5(调试运行)。程序运行完后可能一闪而过,看不到结果。

建议初学者用 Ctrl + F5


图1-4 第一个程序的结构拆解图:帮读者建立程序结构的整体概念。

四、完整代码示例

下面是一个稍微丰富一点的入门程序,你可以把它完整复制到 hello.c 中运行:

c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    // 打印欢迎信息
    printf("========================================\n");
    printf("   欢迎来到 C 语言的世界!\n");
    printf("========================================\n\n");

    // 声明变量
    char name[20];
    int age;

    // 获取用户输入
    printf("请输入你的名字:");
    scanf("%19s", name);

    printf("请输入你的年龄:");
    scanf("%d", &age);

    // 输出结果
    printf("\n你好,%s!\n", name);
    printf("你今年 %d 岁,欢迎开始 C 语言学习之旅!\n", age);

    return 0;
}

关于 #define _CRT_SECURE_NO_WARNINGS

Visual Studio 中,scanf 函数会触发安全警告(C4996),因为微软推荐使用更安全的 scanf_s。但是 scanf_s 不是标准 C 的函数,在其他编译器上用不了。为了保持代码的可移植性,我们在文件第一行加上 #define _CRT_SECURE_NO_WARNINGS,告诉编译器"我知道 scanf 的风险,不要报这个警告"。这是一种很常见的做法。

关于中文输入乱码 :Visual Studio 控制台默认使用的字符编码可能与系统的中文编码不匹配,导致你输入中文名字后,屏幕上显示的是乱码。这是编码配置问题,不影响程序逻辑。建议初学者先用英文名字(如 "Tom" 或 "Alice")进行测试,确保程序能正常运行。等学到文件操作和编码相关内容后,再回头解决中文显示问题。


五、运行结果

运行上面的程序,输入名字和年龄后,你会看到类似这样的输出:

text 复制代码
========================================
   欢迎来到 C 语言的世界!
========================================

请输入你的名字:Tom
请输入你的年龄:20

你好,Tom!
你今年 20 岁,欢迎开始 C 语言学习之旅!

六、代码逐行解析

我们把这个程序拆开来,一行一行看。

第一部分:预处理指令

c 复制代码
#define _CRT_SECURE_NO_WARNINGS

这是一条预处理指令。#define 的作用是"定义一个宏"。这里定义了一个名为 _CRT_SECURE_NO_WARNINGS 的宏,但并没有给它具体的值。它的作用是向 Visual Studio 的编译器发出一个信号:不要对 scanf 等函数报安全警告。这行代码本身不参与程序逻辑。

c 复制代码
#include <stdio.h>

#include 是"包含头文件"的意思。stdio.h 是 C 语言标准的输入输出头文件,里面声明了 printfscanf 这两个函数。如果没有这一行,编译器不认识 printf 是什么,程序就编译不过。你可以把它理解为"从工具箱里拿出一个模块,这个模块里有打印和读取的功能"。

第二部分:main 函数

c 复制代码
int main(void)

这是 C 程序的入口。操作系统启动你的程序时,会寻找 main 函数,然后从它的第一行开始执行。int 是返回值类型,void 表示这个函数不接受任何参数。把 main 写成 int main(void) 是标准 C 的规范写法。

第三部分:注释

c 复制代码
// 打印欢迎信息

// 后面的内容叫"注释"。注释是写给程序员看的东西,编译器会完全忽略它。它不影响程序运行,但对理解代码很有帮助。初学者要养成写注释的习惯------你今天写的代码,三个月后自己可能都看不懂。

第四部分:打印多行信息

c 复制代码
printf("========================================\n");
printf("   欢迎来到 C 语言的世界!\n");
printf("========================================\n\n");

这里用了三个 printf 来打印一个欢迎横幅。\n 是转义字符,表示"换行"。注意第三行末尾有两个 \n,所以横幅下面会显示一个空行,让输出更整洁。

第五部分:声明变量

c 复制代码
char name[20];
int age;

C 语言在使用变量之前,必须先声明它的数据类型:

  • char name[20] ------ 声明一个字符数组,可以存储最多 19 个字符(最后一位留给字符串结束符 \0)。这里用来存放名字。
  • int age ------ 声明一个整数变量,用来存放年龄。

你可以把变量理解为"贴着标签的盒子",盒子的大小和用途由数据类型决定。

第六部分:获取输入

c 复制代码
printf("请输入你的名字:");
scanf("%19s", name);

printf 先输出提示文字,告诉用户该输什么。然后 scanf 等待用户输入,%19s 表示"读取一个字符串,最多读 19 个字符",读到的内容存到 name 这个数组里。限制宽度为 19 是因为 name 数组长度为 20,需要留出 1 位存放字符串结束符 \0,防止输入过长导致溢出。

c 复制代码
printf("请输入你的年龄:");
scanf("%d", &age);

%d 表示"读取一个整数",读到的内容存到 age 这个变量里。注意 name 前面没有 &,而 age 前面有 &。这个区别等到讲数组和指针时会详细解释,现在先记住:用 scanf 读基本类型(如 int、double、char)时,变量前要加 &;读字符串到字符数组时,不加 &

第七部分:输出结果

c 复制代码
printf("\n你好,%s!\n", name);
printf("你今年 %d 岁,欢迎开始 C 语言学习之旅!\n", age);

printf 里的 %s%d 叫做"格式占位符"。运行时,它们会被后面的变量内容替换掉:%s 换成名字字符串,%d 换成年龄整数。

第八部分:程序返回

c 复制代码
return 0;

程序正常结束后返回 0。这个 0 是返回给操作系统的,表示"一切正常"。虽然很多教程里 main 不写 return 0 也能编译通过,但写了是规范做法。


七、初学者常见错误

错误1:忘了写分号

c 复制代码
// 错误写法
printf("Hello")
return 0;

// 正确写法
printf("Hello");
return 0;

C 语言用分号表示语句结束。每次写完一条语句,记得敲分号。编译器如果报"语法错误",先检查是不是漏了分号。

错误2:文件后缀写成了 .cpp

如果新建文件时后缀是 .cpp,编译器会按 C++ 语法来处理。虽然大多数简单程序在 C 和 C++ 下都能跑,但有些写法在 C++ 里会不一样。从开始就养成习惯:C 语言程序用 .c 后缀。

错误3:scanf 变量前忘了加 &

c 复制代码
// 错误写法
scanf("%d", age);

// 正确写法
scanf("%d", &age);

这是初学者最容易犯的错误之一。忘记写 & 会导致程序运行时崩溃或者写入错误的内存位置。不过注意,字符数组(如 char name[20])在 scanf 中不加 &------这个原因我们在数组和指针篇会讲清楚。

错误4:scanf 字符串时数组长度不够

c 复制代码
// 风险写法
char name[5];
scanf("%s", name);   // 用户输入"ZhangSan"就会溢出

// 安全写法
char name[20];
scanf("%19s", name); // 限制最多读取19个字符

字符数组只能装下"长度减1"个有效字符(因为最后一位要留给 \0)。用 %19s 这样的写法可以限制读取的长度,防止溢出。

错误5:按 F5 运行后窗口一闪而过

这是 VS 新手的高频问题。F5 是"调试运行",程序跑完就关窗口了。换成 Ctrl + F5(不调试运行),程序跑完后会暂停,提示"按任意键继续"。

错误6:安装了 VS 但没有勾选"使用 C++ 的桌面开发"

如果安装 Visual Studio 时只选了默认配置,是没有 C/C++ 编译器的。解决方法:重新打开 Visual Studio Installer,在已安装版本旁边点击"修改",勾选"使用 C++ 的桌面开发",然后点"修改"安装。


八、练习题

练习题1:修改打印内容

把本节完整代码中的欢迎横幅改成你自己的风格,比如把 = 换成 *,或者换一句欢迎语。运行程序确认修改生效。

练习题2:增加一个输入项

在现有程序的基础上,再增加一个变量用来保存"学号",提示用户输入学号,然后打印出来。提示:学号通常比较长,可以用 long long 类型,scanf 的格式占位符用 %lld

练习题3:打印日历效果

试着写一个新程序,用多个 printf 语句在屏幕上打印出下面这样的效果:

text 复制代码
  某年某月
日 一 二 三 四 五 六
   1  2  3  4  5  6
7  8  9  10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

这个练习只用 printf 就能完成,目的是让你熟悉 printf 的用法和 \n\t 等转义字符。


九、本篇总结

  1. 环境搭好了:Visual Studio 2022 社区版,记得勾选"使用 C++ 的桌面开发"
  2. 第一个程序跑通了:从创建项目→新建.c文件→写代码→Ctrl+F5运行,这条流程要记熟
  3. 程序基本结构#includemain 函数 → {} 内的代码 → 每条语句分号结尾
  4. printf 输出,scanf 输入%d 对应整数,%s 对应字符串,\n 是换行
  5. Visual Studio 用户记得加 #define _CRT_SECURE_NO_WARNINGS,放在文件最开头

相关推荐
liudanzhengxi1 小时前
AnthropicAPI连接超时:实战避坑指南
开发语言·php
程序leo源1 小时前
Qt信号与槽深度详解
c语言·开发语言·数据库·c++·qt·c#
水云桐程序员1 小时前
C++数组详细介绍
开发语言·c++
码界筑梦坊1 小时前
123-基于Python的特斯拉超级充电站分布数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第56题】【JVM篇】第16题:JVM有哪些垃圾收集器?
java·开发语言·jvm·面试
YangYang9YangYan2 小时前
2026会计人员想提升个人能力学习数据分析的价值
学习·数据挖掘·数据分析
2401_865439632 小时前
CSS中隐藏元素的多重技巧与应用场景
开发语言·前端·javascript
雁迟2 小时前
第六章:for 循环与 while 循环语句
开发语言·r语言
故事和你912 小时前
洛谷-【图论2-2】最短路1
开发语言·数据结构·c++·算法·动态规划·图论