Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/assignments/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ int main()

若代码不符合格式要求,扣除当题分数的 **10%**。

::: details
::: details
技术上,高程所有的格式要求可以表述为这个 `clang-format` 配置:

```yaml
Expand All @@ -180,4 +180,4 @@ IndentCaseLabels: true

### 源程序字符集要求

本学期所有编程作业的字符集要求为 GB 系列(GB2312/GBK/GB18030均可),设置方法详见开学大礼包
本学期所有编程作业的字符集要求为 GB 系列(GB2312/GBK/GB18030均可),设置方法详见开学大礼包
3 changes: 3 additions & 0 deletions docs/faq/F1F2F3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
88 changes: 71 additions & 17 deletions docs/faq/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,20 @@ int main()
1. 这个警告来源于项目结构,不体现在代码文件中,不影响正常编程,也不影响得分,可以直接忽略
2. 这个警告的原因是编译过项目后未进行清理就重命名了项目,导致当前【项目】(而非解决方案)的 `Debug` 目录下有以旧名称命名的中间文件;想要处理也很简单,手动删掉 `Debug` 目录后重新编译即可

### demo / 自己的程序在重定向输入时死循环

用输入重定向/管道方式处理含有错误输入的数据时,**最后一个数据必须是正确的**,和控制台输入的差别如下:

- 控制台方式下,前面若干次输入错误,系统都会清空缓冲区后要求重新输入,如果不输入,就会停在那里等待;

- 输入重定向/管道方式下,前面若干次输入错误,系统都会清空缓冲区后继续从输入文件/管道中读数据,如果读不到数据(文件结束或管道中无后续数据提供),系统会返回 `EOF`(End Of File),此时 `cin.good` 为 0,会进入无限死循环,从而导致输出重定向文件不停增长。

::: details

注:用 get_input_data.exe 方式读 test-data.txt 形式的,要理解每个 `[]` 组是一个题目的测试数据,因此,**每组的最后一个数据必须是正确的**。

:::

### 可以使用大模型吗?

关于大模型的使用政策,请参见课程网站的说明页面:
Expand All @@ -158,43 +172,83 @@ int main()
该问题解决方案适用于以下报错信息:

> error C1083: 无法打开包括文件: "float.h":No such file or directory

<!-- or -->
> error MSB8036: 找不到 Windows SDK 版本 10.0.xxxxx.0。请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。

有两种可能:

::: details 在 Visual Studio 安装过程中没有选择安装 Windows SDK 组件。

- 按 win 键打开“开始”菜单,搜索框中输入 `Visual Studio Installer`,打开
- 按 win 键打开“开始”菜单,搜索框中输入 `Visual Studio Installer`,打开

![open VS installer](open-VS-installer.png)

- 选择 `修改`

![open VS installer](open-VS-installer.png)

- 选择 `修改`
![modify VS](modify-VS.png)

![modify VS](modify-VS.png)

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

![VS Windows SDK](VS-Windows-SDK.png)
![VS Windows SDK](VS-Windows-SDK.png)
:::

::: details 手动删除或移动了 Windows Kits 文件夹的位置,或因为各种原因导致 Windows SDK 未正常安装。

- 如果你能想起来自己删除或移动过 Windows Kits 文件夹,请将它放回原位,路径通常是 `C:\Program Files (x86)\Windows Kits` 或 `D:\Windows Kits`。
- 如果你能想起来自己删除或移动过 Windows Kits 文件夹,请将它放回原位,路径通常是 `C:\Program Files (x86)\Windows Kits` 或 `D:\Windows Kits`。

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

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

![setting application](setting-application.png)
![setting application](setting-application.png)

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

![uninstall Windows SDK](uninstall-Windows-SDK.png)
![uninstall Windows SDK](uninstall-Windows-SDK.png)

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

![repair VS](repair-VS.png)
![repair VS](repair-VS.png)
:::

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

### Fn 与 FnLock 相关简介

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

::: details 关于 `Fn` 键

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

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

![alt text](F1F2F3.png)

可以看到这三个键各自都含有两个图标,上方的 `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`。

:::

::: details `FnLock` 简介,如何切换媒体键模式和功能键模式?

`FnLock` 按键用于切换媒体键模式和功能键模式,通常和 `Esc` 在同一个键上,位于键盘左上角。

若您感觉长期需要组合 `Fn` 按键不太方便,或者你有长时间使用功能键模式(例如编程过程中)或者媒体键模式(例如休息中)的需求,可以进行当前模式的切换。

切换方法:**使用 `Fn+FnLock` 组合键**。切换后 `FnLock` 键上的亮灯状态会发生改变。

:::
1 change: 0 additions & 1 deletion docs/reading/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
+ [CMake](https://cmake.org/) 是当前 C++ 社区的事实标准。尽管其语法、设计和文档多有被人诟病之处,但其良好的生态使其在可预料的未来中不会被淘汰。[Modern CMake for C++](/Modern-CMake-for-C++.pdf) 这本书系统讲解了使用 CMake 的最佳实践。
+ [XMake](https://xmake.io/) 是社区在新一代构建工具的尝试之一(顺带一提,其主导开发者是国人),简单易用,功能强大,也对 CMake 等构建系统提供了兼容。


### Python

作为现代使用最为广泛的编程语言,Python 轻巧、灵活、生态良好,几乎可以在任何领域发挥作用。
Expand Down
207 changes: 206 additions & 1 deletion docs/tables/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,209 @@
| **优先级第17组** | **结合性:L-R** |
| `throw` <Badge type="info" text="C++" /> | 引发异常 |
| **优先级第18组** | **结合性:L-R** |
| `,` | 将两个表达式合并成一个 |
| `,` | 将两个表达式合并成一个 |

## ASCII 码对照表

| Dec (十进制) | Hex (十六进制) | 缩写/字符 | 解释 |
| ------------ | -------------- | ---------- | ---- |
| 0 | 0x00 | NUL (null) | 空字符 |
| 1 | 0x01 | SOH (start of headline) | 标题开始 |
| 2 | 0x02 | STX (start of text) | 正文开始 |
| 3 | 0x03 | ETX (end of text) | 正文结束 |
| 4 | 0x04 | EOT (end of transmission) | 传输结束 |
| 5 | 0x05 | ENQ (enquiry) | 请求 |
| 6 | 0x06 | ACK (acknowledge) | 收到通知 |
| 7 | 0x07 | BEL (bell) | 响铃 |
| 8 | 0x08 | BS (backspace) | 退格 |
| 9 | 0x09 | HT (horizontal tab) | 水平制表符 |
| 10 | 0x0A | LF (NL line feed, new line) | 换行键 |
| 11 | 0x0B | VT (vertical tab) | 垂直制表符 |
| 12 | 0x0C | FF (NP form feed, new page) | 换页键 |
| 13 | 0x0D | CR (carriage return) | 回车键 |
| 14 | 0x0E | SO (shift out) | 不用切换 |
| 15 | 0x0F | SI (shift in) | 启用切换 |
| 16 | 0x10 | DLE (data link escape) | 数据链路转义 |
| 17 | 0x11 | DC1 (device control 1) | 设备控制1 |
| 18 | 0x12 | DC2 (device control 2) | 设备控制2 |
| 19 | 0x13 | DC3 (device control 3) | 设备控制3 |
| 20 | 0x14 | DC4 (device control 4) | 设备控制4 |
| 21 | 0x15 | NAK (negative acknowledge) | 拒绝接收 |
| 22 | 0x16 | SYN (synchronous idle) | 同步空闲 |
| 23 | 0x17 | ETB (end of trans. block) | 结束传输块 |
| 24 | 0x18 | CAN (cancel) | 取消 |
| 25 | 0x19 | EM (end of medium) | 媒介结束 |
| 26 | 0x1A | SUB (substitute) | 代替 |
| 27 | 0x1B | ESC (escape) | 换码(溢出) |
| 28 | 0x1C | FS (file separator) | 文件分隔符 |
| 29 | 0x1D | GS (group separator) | 分组符 |
| 30 | 0x1E | RS (record separator) | 记录分隔符 |
| 31 | 0x1F | US (unit separator) | 单元分隔符 |
| 32 | 0x20 | (space) | 空格 |
| 33 | 0x21 | ! | 叹号 |
| 34 | 0x22 | " | 双引号 |
| 35 | 0x23 | # | 井号 |
| 36 | 0x24 | $ | 美元符 |
| 37 | 0x25 | % | 百分号 |
| 38 | 0x26 | & | 和号 |
| 39 | 0x27 | ' | 闭单引号 |
| 40 | 0x28 | ( | 开括号 |
| 41 | 0x29 | ) | 闭括号 |
| 42 | 0x2A | * | 星号 |
| 43 | 0x2B | + | 加号 |
| 44 | 0x2C | , | 逗号 |
| 45 | 0x2D | - | 减号/破折号 |
| 46 | 0x2E | . | 句号 |
| 47 | 0x2F | / | 斜杠 |
| 48 | 0x30 | 0 | 字符0 |
| 49 | 0x31 | 1 | 字符1 |
| 50 | 0x32 | 2 | 字符2 |
| 51 | 0x33 | 3 | 字符3 |
| 52 | 0x34 | 4 | 字符4 |
| 53 | 0x35 | 5 | 字符5 |
| 54 | 0x36 | 6 | 字符6 |
| 55 | 0x37 | 7 | 字符7 |
| 56 | 0x38 | 8 | 字符8 |
| 57 | 0x39 | 9 | 字符9 |
| 58 | 0x3A | : | 冒号 |
| 59 | 0x3B | ; | 分号 |
| 60 | 0x3C | < | 小于 |
| 61 | 0x3D | = | 等号 |
| 62 | 0x3E | > | 大于 |
| 63 | 0x3F | ? | 问号 |
| 64 | 0x40 | @ | 电子邮件符号 |
| 65 | 0x41 | A | 大写字母A |
| 66 | 0x42 | B | 大写字母B |
| 67 | 0x43 | C | 大写字母C |
| 68 | 0x44 | D | 大写字母D |
| 69 | 0x45 | E | 大写字母E |
| 70 | 0x46 | F | 大写字母F |
| 71 | 0x47 | G | 大写字母G |
| 72 | 0x48 | H | 大写字母H |
| 73 | 0x49 | I | 大写字母I |
| 74 | 0x4A | J | 大写字母J |
| 75 | 0x4B | K | 大写字母K |
| 76 | 0x4C | L | 大写字母L |
| 77 | 0x4D | M | 大写字母M |
| 78 | 0x4E | N | 大写字母N |
| 79 | 0x4F | O | 大写字母O |
| 80 | 0x50 | P | 大写字母P |
| 81 | 0x51 | Q | 大写字母Q |
| 82 | 0x52 | R | 大写字母R |
| 83 | 0x53 | S | 大写字母S |
| 84 | 0x54 | T | 大写字母T |
| 85 | 0x55 | U | 大写字母U |
| 86 | 0x56 | V | 大写字母V |
| 87 | 0x57 | W | 大写字母W |
| 88 | 0x58 | X | 大写字母X |
| 89 | 0x59 | Y | 大写字母Y |
| 90 | 0x5A | Z | 大写字母Z |
| 91 | 0x5B | [ | 开方括号 |
| 92 | 0x5C | \ | 反斜杠 |
| 93 | 0x5D | ] | 闭方括号 |
| 94 | 0x5E | ^ | 脱字符 |
| 95 | 0x5F | _ | 下划线 |
| 96 | 0x60 | ` | 开单引号 |
| 97 | 0x61 | a | 小写字母a |
| 98 | 0x62 | b | 小写字母b |
| 99 | 0x63 | c | 小写字母c |
| 100 | 0x64 | d | 小写字母d |
| 101 | 0x65 | e | 小写字母e |
| 102 | 0x66 | f | 小写字母f |
| 103 | 0x67 | g | 小写字母g |
| 104 | 0x68 | h | 小写字母h |
| 105 | 0x69 | i | 小写字母i |
| 106 | 0x6A | j | 小写字母j |
| 107 | 0x6B | k | 小写字母k |
| 108 | 0x6C | l | 小写字母l |
| 109 | 0x6D | m | 小写字母m |
| 110 | 0x6E | n | 小写字母n |
| 111 | 0x6F | o | 小写字母o |
| 112 | 0x70 | p | 小写字母p |
| 113 | 0x71 | q | 小写字母q |
| 114 | 0x72 | r | 小写字母r |
| 115 | 0x73 | s | 小写字母s |
| 116 | 0x74 | t | 小写字母t |
| 117 | 0x75 | u | 小写字母u |
| 118 | 0x76 | v | 小写字母v |
| 119 | 0x77 | w | 小写字母w |
| 120 | 0x78 | x | 小写字母x |
| 121 | 0x79 | y | 小写字母y |
| 122 | 0x7A | z | 小写字母z |
| 123 | 0x7B | { | 开花括号 |
| 124 | 0x7C | \| | 垂线 |
| 125 | 0x7D | } | 闭花括号 |
| 126 | 0x7E | ~ | 波浪号 |
| 127 | 0x7F | DEL (delete) | 删除 |

## C++ 方式输入输出的格式化控制

| 控制符 | 作用 |
| ------ | ---- |
| dec | 设置整数为10进制 |
| hex | 设置整数为16进制 |
| oct | 设置整数为8进制 |
| setbase(n) | 设置整数为n进制(n=8,10,16) |
| setfill(c) | 设置填充字符,c可以是字符常量或字符变量 |
| setprecision(n) | 设置实数的精度为n位。在以一般十进制形式输出时,n代表有效数字。在以fixed(固定小数位)形式和scientific(指数)形式输出时,n为小数位数 |
| setw(n) | 设置字段宽度为n |
| setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 |
| setiosflags(ios::scientific) | 设置浮点数以科学计数法(即指数形式)显示 |
| setiosflags(ios::left) | 输出数据左对齐 |
| setiosflags(ios::right) | 输出数据右对齐 |
| setiosflags(ios::skipws) | 忽略前导的空格 |
| setiosflags(ios::uppercase) | 在以科学计数法输出E和十六进制输出字母X时,以大写表示 |
| setiosflags(ios::showpos) | 输出正数时,给出“+”号 |
| resetiosflags(*) | 终止已设置的输出格式状态,括号内为具体内容(本处用*替代) |

## C 方式输入输出的格式化控制

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里使用原始 HTML 而非 Markdown 格式是否有充分的理由?通常我们不应该直接写裸 HTML。如果确有需求,应当为它编写一个组件

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

理解原子性需求,我稍后将拆成多个 PR 提交;使用原始 HTML 是由于该表格包含合并的单元格(colspan / rowspan),Markdown 原生语法无法实现此类复杂表头结构。

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<table border="1" cellpadding="8" cellspacing="0" style="width: auto">
<thead>
<tr>
<th>格式字符</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<!-- printf所用的格式字符 -->
<tr>
<td colspan="2" style="font-weight: bold;">printf所用的格式字符的种类:</td>
</tr>
<tr><td>d, i</td><td>带符号的十进制形式整数(正数不带+)</td></tr>
<tr><td>o</td><td>八进制无符号形式输出整数(不带前导0)</td></tr>
<tr><td>x, X</td><td>十六进制无符号形式输出整数(不带前导0x)</td></tr>
<tr><td>u</td><td>十进制无符号形式输出整数</td></tr>
<tr><td>c</td><td>以字符形式输出(一个字符)</td></tr>
<tr><td>s</td><td>输出字符串</td></tr>
<tr><td>f</td><td>以小数形式输出浮点数</td></tr>
<tr><td>e, E</td><td>以指数形式输出浮点数</td></tr>
<tr><td>g, G</td><td>从f,e中选择宽度较短的形式输出浮点数</td></tr>
<tr>
<td colspan="2" style="font-weight: bold;">printf所用的附加格式字符的种类:</td>
</tr>
<tr><td>字母l</td><td>表示长整型整数,用于d,o,x,u前</td></tr>
<tr><td>字母h</td><td>表示短整型整数,用于d,o,x,u前</td></tr>
<tr><td>正整数m</td><td>表示输出数据的宽度</td></tr>
<tr><td>正整数.n</td><td>对浮点数,表示n位小数;对字符串,表示前n个字符</td></tr>
<tr><td>-</td><td>输出左对齐</td></tr>
<tr>
<td colspan="2" style="font-weight: bold;">scanf所用的格式字符的种类:</td>
</tr>
<tr><td>d, i</td><td>输入带符号的十进制形式整数</td></tr>
<tr><td>o</td><td>输入八进制无符号形式整数(不带前导0)</td></tr>
<tr><td>x, X</td><td>输入十六进制无符号形式整数(不带前导0x)</td></tr>
<tr><td>u</td><td>输入十进制无符号形式整数</td></tr>
<tr><td>c</td><td>输入单个字符</td></tr>
<tr><td>s</td><td>输入字符串</td></tr>
<tr><td>f</td><td>输入小数/指数形式的浮点数</td></tr>
<tr><td>e, E, g, G</td><td>同f</td></tr>
<tr>
<td colspan="2" style="font-weight: bold;">scanf所用的附加格式字符的种类:</td>
</tr>
<tr><td>字母l</td><td>输入长整型数,用于d,o,x,u前;输入double型数,用于f,e,g前</td></tr>
<tr><td>字母h</td><td>输入短整型数,用于d,o,x,u前</td></tr>
<tr><td>正整数n</td><td>指定输入数据所占的宽度</td></tr>
<tr><td>*</td><td>本输入项不赋给相应的变量</td></tr>
</tbody>
</table>
Loading