Skip to content

常见问题解答

TIP

提问前请务必认真阅读 学会提问 一文。

目录

一般性问题

中文乱码

请确保在 VS 中 检查 过源代码的文件编码;问题仍然存在,则参见 区域和语言设置

若想要快速定位问题,可参考这一份 Unicode 中文乱码速查表

例如:

  • 若您运行程序时输出是古文码,大概率是因为源程序文件保存为了 UTF-8 方式,而终端以 GBK 方式打印,此时需要按大礼包方式设置文件编码为 GB 系列。
  • 若您运行程序时输出是口字码,大概率是因为源程序文件保存为 GB 系列,而终端以 UTF-8 方式打印,此时需要参见上方的区域和语言设置。

WARNING

若您运行程序时输出无乱码,也不能排除源程序文件和打印方式都错误地使用了 UTF-8,因此仍要按大礼包方式正确设置编码并检查!

“错误列表”与“输出”

Visual Studio 中,有两个窗口均会显示程序编译中的错误。默认情况下我们会看到的是“错误列表”——一个比较美观漂亮的表格,分不同的颜色显示“错误”、“警告”和“消息”。在“错误列表”的下方,可以切换至“输出”标签页,它的内容是朴素的文本,如下图所示:

输出窗口

TIP

如果没有看到或不慎关闭了“输出”标签页,可以通过菜单栏 视图-输出 选项,或者快捷键 Ctrl+Alt+O 唤出。

值得注意的是,“输出”窗口会标识出错误所在的行数和列数,且双击这一行文字可以自动在程序正文中锁定相应行。

本课程要求,提问、作答作业时,均应该使用输出窗口,理由如下:

  1. “输出”是来自编译器的完整原始信息,可以最大限度地还原编译器的工作流程,有助于问题回答者去发现、定位你遇到的问题。部分操作错误,如未正确设置启动项、程序没有重新编译,也可以通过观察“输出”内容分辨。
  2. “错误列表”中会同时出现来自编译器与智能提示引擎(IntelliSence)的信息。智能提示引擎给出的部分 warning 过于敏感,本课程不强制要求解决。 另外,有时智能提示引擎会出一些小 bug,也会导致无效的报错信息污染“错误列表”。
“智能提示”与“输出”存在差异的例子
c
#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 程序可以正确编译、运行,在“输出”窗口中不会有任何报错。但“错误列表”窗口会出现一个“返回值被忽略”的警告[1]。这类警告不强制要求解决,也不会导致作业失分

“应用程序控制策略已阻止此文件。恶意二进制信誉。”

alt text

没有按照开学大礼包 要求 完成环境配置。

截屏

  • 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 文档或高程文档作业答题区。

文档作业网站提示“图片大小超过限制”或“答卷内容太大,请删除部分内容”

  1. 只截屏必要的部分,例如包含答案文本的小块区域
  2. 使用 QQ 截屏等会自动压缩图片的工具,或者通过在 QQ 中发送之后复制发出的图片等方式简单地减小图片体积
  3. 使用本站的 图片压缩实用工具

pdf 压缩

上传 pdf 的时候提示文件过大怎么办?

有两种做法:

  1. 导出pdf的时候通过合适的选项减小生成的pdf大小,以 Microsoft PowerPoint 为例:

    minimized pdf

  2. 搜索“在线pdf压缩”,有许多免费工具都可以做到压缩 pdf 大小

exe 无法写入

LINK1168: 无法打开 xx.exe 进行写入

有两种可能:

  1. 上一次运行程序没有结束,应当关闭上次的运行窗口(少部分情况下窗口关了但后台进程仍在运行,此时需要在任务管理器中结束,或者重启计算机)

  2. 程序被杀毒软件误杀了,关闭杀毒软件

    如果你没有安装其他第三方安全软件(e.g. Macfee、360安全卫士、腾讯电脑管家……),那么你需要关闭的是系统自带的 Windows Defender 实时防护。

    可以点击 此链接 或在 设置-隐私与安全性-Windows 安全中心-病毒与威胁防护-“病毒和威胁防护”设置 打开设置页面,关闭“实时保护”功能。

WARNING

关闭安全软件仅为临时解决方案。在工作完成后,仍建议重新开启防护功能。

cout 不明确

E0266: "cout" 不明确

这个报错暂无比较明确的触发机制,属于 VS 本身智能提示的问题,只要输出窗口保持“0error, 0warning”,就不影响得分。

暂时的解决方案:删去 using namespace std; 最后的一个分号,再添加上即可。

永久的解决方案:不使用标准命名空间,而是每次都用 std::cout 代替。

Warning MSB8028 “错误的清除和重新生成行为”

  1. 这个警告来源于项目结构,不体现在代码文件中,不影响正常编程,也不影响得分,可以直接忽略
  2. 这个警告的原因是编译过项目后未进行清理就重命名了项目,导致当前【项目】(而非解决方案)的 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,打开

open VS installer

  • 选择 修改

modify VS

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

VS Windows SDK

手动删除或移动了 Windows Kits 文件夹的位置,或因为各种原因导致 Windows SDK 未正常安装。
  • 如果你能想起来自己删除或移动过 Windows Kits 文件夹,请将它放回原位,路径通常是 C:\Program Files (x86)\Windows KitsD:\Windows Kits

  • 如果你不记得进行过相关操作/找不到 Windows Kits 文件夹/放回原位后问题仍未解决。

    • 打开 Windows 设置(快捷键 Win + I),进入 应用-安装的应用

    setting application

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

    uninstall Windows SDK

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

    repair VS

如果在执行上述步骤过程中出现问题,或完成上述步骤后报错仍未解决,请联系助教寻求帮助。

Fn 与 FnLock 相关简介

在笔记本电脑中,我们能看到一个 Fn 键和 FnLock 键,其目的是为用户对计算机的常用操作提供更高效便捷的方式。

关于 Fn

Fn 意为 Function,功能键,通常位于键盘的左下角,它是一个修饰键,主要用于与其它键(位于 F1~F12 之间,另含 PtrSc,不同计算机存在差异)组合以触发额外的功能。

下面以 LENOVO 某笔记本电脑举例:

alt text

可以看到这三个键各自都含有两个图标,上方的 F1F2F3 称为功能键,下方的 静音音量减小音量增大 称为媒体键。而 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 键上的亮灯状态会发生改变。

附注

  1. 这个警告是有道理的,但对学习输入错误处理之前的初学者无意义。 ↩︎