常见问题解答
TIP
提问前请务必认真阅读 提问指南 一文。
目录
一般性问题
中文乱码
请确保在 VS 中 检查 过源代码的文件编码;并正确按照开学大礼包配置了 区域和语言设置。
若想要快速定位问题,可参考这一份 Unicode 中文乱码速查表[1]:
| 乱码 | 示例 | 特点 | 产生原因 |
|---|---|---|---|
| 古文码 | 鐢辨湀瑕佸ソ濂藉涔犲ぉ澶╁悜涓? | 大都为不认识的古文,并加杂日韩文 | 以 GBK 方式读取 UTF-8 编码的中文 |
| 口字码 | ����Ҫ�¨2�ѧϰ������ | 大部分字符为小方块 | 以 UTF-8 的方式读取 GBK 编码的中文 |
| 符号码 | 由月è|好好å-|ä1 天天å‘上 | 大部分字符为各种符号 | 以 ISO8859-1 方式读取 UTF-8 编码的中文 |
| 拼音码 | óéÔÂòaoÃoÃѧϰììììÏòéÏ | 大部分字符为头顶带有各种类似声调符号的字母 | 以 ISO8859-1 方式读取 GBK 编码的中文 |
| 问句码 | 由月要好好学习天天向?? | 字符串长度为偶数时正确,长度为奇数时最后的字符变为问号 | 以 GBK 方式读取 UTF-8 编码的中文,然后又用 UTF-8 的格式再次读取 |
| 锟拷码 | 锟斤拷锟斤拷要锟矫猴拷学习锟斤拷锟斤拷锟斤拷 | 全中文字符,且大部分字符为“锟斤拷”这几个字符 | 以 UTF-8 方式读取 GBK 编码的中文,然后又用 GBK 的格式再次读取 |
| 烫烫烫 | 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 | 字符显示为“烫烫烫”这几个字符 | VS Debug 模式下,栈内存未初始化 |
| 屯屯屯 | 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯 | 字符显示为“屯屯屯”这几个字符 | VS Debug 模式下,堆内存未初始化 |
例如:
- 若您运行程序时输出是古文码,大概率是因为源程序文件保存为了 UTF-8 方式,而终端以 GBK 方式打印,此时需要按大礼包方式设置文件编码为 GB 系列。
- 若您运行程序时输出是口字码,大概率是因为源程序文件保存为 GB 系列,而终端以 UTF-8 方式打印,此时需要参见 区域和语言设置。
WARNING
若您运行程序时输出无乱码,也不能排除源程序文件和打印方式都错误地使用了 UTF-8,因此仍要按大礼包方式正确设置编码并检查!
“错误列表”与“输出”
Visual Studio 中,有两个窗口均会显示程序编译中的错误。默认情况下我们会看到的是“错误列表”——一个比较美观漂亮的表格,分不同的颜色显示“错误”、“警告”和“消息”。在“错误列表”的下方,可以切换至“输出”标签页,它的内容是朴素的文本,如下图所示:

TIP
如果没有看到或不慎关闭了“输出”标签页,可以通过菜单栏 视图-输出 选项,或者快捷键 Ctrl+Alt+O 唤出。
值得注意的是,“输出”窗口会标识出错误所在的行数和列数,且双击这一行文字可以自动在程序正文中锁定相应行。
本课程要求,提问、作答作业时,均应该使用输出窗口,理由如下:
- “输出”是来自编译器的完整原始信息,可以最大限度地还原编译器的工作流程,有助于问题回答者去发现、定位你遇到的问题。部分操作错误,如未正确设置启动项、程序没有重新编译,也可以通过观察“输出”内容分辨。
- “错误列表”中会同时出现来自编译器与智能提示引擎(IntelliSence)的信息。智能提示引擎给出的部分 warning 过于敏感,本课程不强制要求解决。 另外,有时智能提示引擎会出一些小 bug,也会导致无效的报错信息污染“错误列表”。
“智能提示”与“输出”存在差异的例子
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
// (来自 IntelliSence 的警告)返回值被忽略: “scanf”。
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
return 0;
}这段简单的 C 程序可以正确编译、运行,在“输出”窗口中不会有任何报错。但“错误列表”窗口会出现一个“返回值被忽略”的警告[2]。这类警告不强制要求解决,也不会导致作业失分。
“应用程序控制策略已阻止此文件。恶意二进制信誉。”

没有按照开学大礼包 要求 完成环境配置。
截屏
QQ 截屏工具(默认快捷键:
Ctrl+Alt+A)QQ 的截屏工具非常强大,支持在选定的框中绘制形状、绘制箭头、添加文本、添加马赛克等等,还具有提取文字、翻译、钉在桌面等功能。双击已选中图形或点击完成会让截屏内容(包括编辑内容)存入剪切板。
Windows 自带截屏工具(默认快捷键:
🪟+Shift+S)Windows 截屏工具会直接让用户选定一个矩形区域,然后自动存入剪切板,操作快捷,裁剪区域会同时存入
C:\用户\<username>\图片\屏幕截图中。ShareX(默认快捷键:
Ctrl+Print Screen)ShareX 是一款开源的截屏工具,可在 GitHub 访问其 官网 下载。支持各种图片编辑功能,能查询历史截屏记录,还支持录屏和录制 GIF 等功能,截屏后会自动存入剪切板。
Snipaste(默认快捷键:
F1)Snipaste 是一款商业级截屏工具,有免费版,可通过 Microsoft Store 搜索 Snipaste 或者访问 官网 下载。功能强大,和 QQ 截屏工具类似,其贴到屏幕后还可以对图片进行放大缩小、更改透明度的操作。双击已选中图形、点击复制到剪切板或使用快捷键
Ctrl+C后,会让截屏内容(包括编辑内容)存入剪切板。
截图自动存入剪贴板后,可以直接用 Ctrl+V 粘贴到聊天窗口、Word/PPT 文档或高程文档作业答题区。
文档作业网站提示“图片大小超过限制”或“答卷内容太大,请删除部分内容”
- 只截屏必要的部分,例如包含答案文本的小块区域
- 使用 QQ 截屏等会自动压缩图片的工具,或者通过在 QQ 中发送之后复制发出的图片等方式简单地减小图片体积
- 使用本站的 图片压缩实用工具
pdf 压缩
上传 pdf 的时候提示文件过大怎么办?
有两种做法:
导出pdf的时候通过合适的选项减小生成的pdf大小,以 Microsoft PowerPoint 为例:

搜索“在线pdf压缩”,有许多免费工具都可以做到压缩 pdf 大小
exe 无法写入
LINK : fatal error LNK1168: 无法打开 xx.exe 进行写入
有三种可能:
上一次运行程序没有结束,应当关闭上次的运行窗口(少部分情况下窗口关了但后台进程仍在运行,此时需要在任务管理器中结束,或者重启计算机)
用 VS 执行(Ctrl+F5/F5)并快速关闭了命令行窗口(实际程序运行之前)。此时需要从任务管理器的后台进程中找到对应的程序(可以点击状态栏排序,将挂起状态排在前面),右键将其结束。
Details

无法启动 Microsoft Visual Studio 调试控制台
若源代码中含有循环结构,生成的程序中含有可能会被安全软件判定为大规模循环的部分,首次运行这个程序时安全软件将会对其进行检查,检查时间一般与其判定的规模成正相关,最长大概在2s。
当VS控制台未启动程序便结束之后,很快就会发出创建调试进程的信号。此时关闭控制台,调试进程还未初始化,VS将会判定为调试控制台未正常启动(实际上是安全软件正在检查程序,将其进程创建阻塞),弹出上图弹窗。由于父主进程被结束,清理没有执行。500ms-2000ms左右安全程序检查完成之后调试进程初始化并完成,但由于没有进程调用,便作为残留进程挂起,需要手动结束。
上述过程为使用ProcMon分析结果,供参考。
挂起进程的程序保持只读状态。

本图中挂起进程为 demo.exe,将其结束即可继续编译生成可执行文件。
程序被杀毒软件误杀了,关闭杀毒软件
如果你没有安装其他第三方安全软件(e.g. Macfee、360安全卫士、腾讯电脑管家……),那么你需要关闭的是系统自带的 Windows Defender 实时防护。
可以点击 此链接 或在
设置-隐私与安全性-Windows 安全中心-病毒与威胁防护-“病毒和威胁防护”设置打开设置页面,关闭“实时保护”功能。
WARNING
关闭安全软件仅为临时解决方案。在工作完成后,仍建议重新开启防护功能。
cout 不明确
E0266: "cout" 不明确
这个报错暂无比较明确的触发机制,属于 VS 本身智能提示的问题,只要输出窗口保持“0error, 0warning”,就不影响得分。
暂时的解决方案:删去 using namespace std; 最后的一个分号,再添加上即可。
永久的解决方案:不使用标准命名空间,而是每次都用 std::cout 代替。
Warning MSB8028 “错误的清除和重新生成行为”
- 这个警告来源于项目结构,不体现在代码文件中,不影响正常编程,也不影响得分,可以直接忽略
- 这个警告的原因是编译过项目后未进行清理就重命名了项目,导致当前【项目】(而非解决方案)的
Debug目录下有以旧名称命名的中间文件;想要处理也很简单,手动删掉Debug目录后重新编译即可
demo / 自己的程序在重定向输入时死循环
用输入重定向/管道方式处理含有错误输入的数据时,最后一个数据必须是正确的,和控制台输入的差别如下:
控制台方式下,前面若干次输入错误,系统都会清空缓冲区后要求重新输入,如果不输入,就会停在那里等待;
输入重定向/管道方式下,前面若干次输入错误,系统都会清空缓冲区后继续从输入文件/管道中读数据,如果读不到数据(文件结束或管道中无后续数据提供),系统会返回
EOF(End Of File),此时cin.good()为 0,会进入无限死循环,从而导致输出重定向文件不停增长。
Details
注:用 get_input_data.exe 方式读 test-data.txt 形式的,要理解每个 [] 组是一个题目的测试数据,因此,每组的最后一个数据必须是正确的。
可以使用大模型吗?
关于大模型的使用政策,请参见课程网站的说明页面:
使用生成式人工智能
该页面中对是否允许使用、责任边界、禁止事项以及使用建议都有明确说明,请在使用前务必仔细阅读。
其他问题
Windows SDK 缺失
该问题解决方案适用于以下报错信息:
error C1083: 无法打开包括文件: "float.h":No such file or directory
error MSB8036: 找不到 Windows SDK 版本 10.0.xxxxx.0。请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。
有两种可能:
在 Visual Studio 安装过程中没有选择安装 Windows SDK 组件。
- 按 win 键打开“开始”菜单,搜索框中输入
Visual Studio Installer,打开

- 选择
修改

- 在打开的菜单中,确认右侧
使用 C++ 的桌面开发-可选中至少有一个Windows 11 SDK选项被勾选。如果没有,将它勾选上,然后点击右下角的修改按钮安装,结束。

手动删除或移动了 Windows Kits 文件夹的位置,或因为各种原因导致 Windows SDK 未正常安装。
如果你能想起来自己删除或移动过 Windows Kits 文件夹,请将它放回原位,路径通常是
C:\Program Files (x86)\Windows Kits或D:\Windows Kits。如果你不记得进行过相关操作/找不到 Windows Kits 文件夹/放回原位后问题仍未解决。
- 打开 Windows 设置(快捷键
Win + I),进入应用-安装的应用

- 搜索 Windows Software Development Kit,把这里能看到的每一项都选择卸载

- 卸载完成后,再打开 Visual Studio Installer,选择
更多-修复,这将重新安装 Windows SDK。

- 打开 Windows 设置(快捷键
如果在执行上述步骤过程中出现问题,或完成上述步骤后报错仍未解决,请联系助教寻求帮助。
未能正确加载“IntelliCodeCppPackage”包

未能正确加载“IntelliCodeCppPackage”包。
此问题可能是因配置更改或安装另一个扩展导致的。……
该问题一般出现在 VS 更新之后,且重启 VS、通过 Visual Studio Installer 修复均无法解决。查看弹窗中提到的 ActivityLog.xml,可以找到关键报错:
CreateInstance failed for package [IntelliCodeCppPackage]
System.ArgumentException: 路径中具有非法字符其原因是 VS 的安装路径中含有中文(或其他特殊字符),更新后相关组件无法正常加载。
解决方案:打开 Visual Studio Installer,卸载 VS 后重新安装,安装时在“安装位置”选项卡中选择不含中文及特殊字符的路径(建议直接使用默认路径)。
扩展界面初始化抛出错误

Initialization of 'Microsoft.VisualStudio.ExtensionsExplorer.UI.ThemedToggleButton' threw an exception.
原因大概率源于某些扩展包没有正常加载。请按照 未能正确加载“IntelliCodeCppPackage”包 的解决方案进行操作,一般这两个问题也会先后出现。
无法处理 Microsoft.VisualStudio.Product.Community

安装已完成,但出现警告 很抱歉,出现了问题 无法处理 Microsoft.VisualStudio.Product.Community。
问题分析
点击页面下面一行 查看日志 的小字,可以看到详细安装日志。

返回代码: 1
返回代码详细信息: 函数不正确单纯看这份日志无法精确定位,需要进一步看图中指向的日志。

指向的日志中翻到最后往前看,发现最后有 Result: Failure。全文搜索 Failure 没有其他位置出现,可以锁定是 devenv.exe 和 SSMS.exe 不存在,可以推测是它们由于某种原因在其他流程中安装失败。接下来需要看其他的安装日志。注意到这个日志名字 dd_setup_20260915234957_301_Microsoft.VisualStudio.Product.Community.log,中间有序号。可以尝试找中间没有序号数字的日志文件,这通常是主安装日志。序号前的数字显然为时间戳,与安装时间有关。可以推测主安装日志为 dd_setup_20260915234957.log。实际上确实如此。
主安装日志中搜索 Failure 发现对应的位置很多,换用 Error 进行搜索也发现会匹配相关错误类。最后使用 Error: 进行定位,可以找到具体的错误信息。

Error: Package 'Microsoft.VisualStudio.Setup.Configuration,version=4.8.41.48107' failed to install. MSI: D:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualStudio.Setup.Configuration,version=4.8.41.48107\Microsoft.VisualStudio.Setup.Configuration.msi, Properties: REBOOT=ReallySuppress ARPSYSTEMCOMPONENT=1 ALLUSERS="1" MSIFASTINSTALL="7" , Return code: 1603, Details: 安装时发生严重错误, Signature: PackageId=Microsoft.VisualStudio.Setup.Configuration;PackageAction=install;ReturnCode=1603
可以看见组件包 Microsoft.VisualStudio.Setup.Configuration,version=4.8.41.48107 安装失败,返回了错误码 1603。
可以推断是 MSI 安装过程中出现了问题,导致组件包安装失败。需要我们完全卸载 MSI 安装的相关组件后重新安装。
(MSI 安装过程实际上也有日志,但是这次我们没有及时查看,被清理了)
我们需要使用程序安装和卸载疑难解答程序(即 Program Install and Uninstall Troubleshooter,下文简称 Troubleshooter)来解决这个问题。
直接 点击这个下载链接,即可下载官网的 Troubleshooter。
下载完成后,运行下载的程序。

点击下一步按钮,可能会加载一会。

点击卸载按钮。

在这个页面等待检测完成。

检测完成后,在程序列表中选中 Microsoft Visual Studio Setup Configuration,然后点击下一步按钮。

点击是 是,尝试卸载。
卸载完成之后,重新运行 Visual Studio 安装程序,重新安装所需的 VS 版本即可。
Fn 与 FnLock 相关简介
在笔记本电脑中,我们能看到一个 Fn 键和 FnLock 键,其目的是为用户对计算机的常用操作提供更高效便捷的方式。
关于 Fn 键
Fn 意为 Function,功能键,通常位于键盘的左下角,它是一个修饰键,主要用于与其它键(位于 F1~F12 之间,另含 PtrSc,不同计算机存在差异)组合以触发额外的功能。
下面以 LENOVO 某笔记本电脑举例:

可以看到这三个键各自都含有两个图标,上方的 F1、F2、F3 称为功能键,下方的 静音、音量减小、音量增大 称为媒体键。而 Fn 的作用就是切换功能键和媒体键的选择。默认由电脑的设置方式决定。通常有两种模式:
媒体键模式(默认):
- 单独按下
F1-F12:执行图标对应的快捷功能(比如按F1直接静音)。 - 按住
Fn+ 按F1-F12:执行标准功能键(比如按Fn+F1打开帮助)。
功能键模式:
- 单独按下
F1-F12:执行标准功能键(比如按F1打开帮助)。 - 按住
Fn+ 按F1-F12:执行图标对应的快捷功能(比如按Fn+F1静音)。
你可以自行探索当前是什么模式。例如:在桌面单独按下 F1 后静音,说明是媒体键模式;在桌面单独按下 F1 后跳转到浏览器的帮助,说明是功能键模式。
对于 Visual Studio 2026 的编译快捷键,若你处于媒体键模式,则需要按 Ctrl+Fn+F5。
FnLock 简介,如何切换媒体键模式和功能键模式?
FnLock 按键用于切换媒体键模式和功能键模式,通常和 Esc 在同一个键上,位于键盘左上角。
若您感觉长期需要组合 Fn 按键不太方便,或者你有长时间使用功能键模式(例如编程过程中)或者媒体键模式(例如休息中)的需求,可以进行当前模式的切换。
切换方法:使用 Fn+FnLock 组合键。切换后 FnLock 键上的亮灯状态会发生改变。
附注
引用自 https://github.com/justjavac/unicode-encoding-error-table/tree/main ↩︎
这个警告是有道理的,但对学习输入错误处理之前的初学者无意义。 ↩︎

