目录
一,字符串+转义字符+注释
1,字符串
请看下面一段代码
从上面一段代码中可以看到:
char arr1[] = {"abc"} ; //结果正常输出abc
char arr2[] = { 'a','b','c'} ; //输出奇怪的abc烫烫烫......
arr1 为什么能正常输出 abc ?
arr2 为什么不能正常的输出 abc ?
这就关系到在 C 语言中,字符串是一系列字符的集合,以 '\0' (空字符)作为结束标志。
—在 arr1[] = {"abc"} ; 中的 abc 后面有被隐藏的空字符;
—在arr2[] = { 'a','b','c'} ;中的 'a','b','c' 是没有 '\0' 结束标志的,那我们给它加上。
如下:
可以看到修改后的 arr2[] = { 'a','b','c','\0'}; 结果正常输出abc
2,转义字符
C 语言中的转义字符是一些具有特殊含义的字符,它们以反斜杠 \ 开头,用于表示控制符(如回车、换行等)、不可见字符或具有特殊功能的字符。
以下是一些常见的转义字符及其含义:
\0 | 空字符,常被系统自动加在每个字符串的尾部,作为字符串的结束标志,占用一个字节的内存空间。 |
\a | 响铃,输出时会发出错误音效。 |
\b | 退格(backspace),在某些编译器中,它的功能类似于键盘上的向左删除键,会将光标向前移动一位,但不会删除字符,如果后面有新的字符输出,新字符会覆盖原来的字符;在另一些编译器中,它可能只是移动光标位置。 |
\t | 水平制表符,即横向跳格,跳到下一制表位,可把每 8 个字符看作一个制表位, \t 前面字符还差几个满 8 个字符就空几个字符的位置。 |
\n | 回车换行(enter),将光标移动到下一行的开头。 |
\v | 垂直制表符,即竖向跳格,在某些编译器中可能无法体现其效果。 |
\f | 走纸符,换页,将当前位置光标移到下一页开头,在控制台中通常无法体现出作用,但在打印走纸换页时可以使用,它能将后面的文本打印到一张新纸。 |
\r | 回车,将光标位置移到本行开头。 |
\" | 表示双引号 " 。 |
\' | 表示单引号 ' 。 |
\? | 表示问号 ? ,防止在书写连续多个问号时被解析成三字母词。 |
\\ | 表示反斜线字符 \ 。 |
\ddd | 其中 ddd 表示 1 到 3 位八进制数。将八进制数转换为十进制,该十进制数对应的 ASCII 码就是输出的字符。需要注意,每个八进制数字不能大于 7,一旦大于 7 就要进位,而且 \ddd 最多只能支持三位数字,若超出范围,编译器可能会报错,或者遇到非八进制数字时则转换结束,直接取末尾数字。 |
\xhh | 其中 hh 表示两位十六进制数。使用前要加 \x ,将十六进制数转换为十进制,该十进制数对应的 ASCII 码就是输出的字符。 |
3,注释
在 C 语言中,有两种注释方式:
1. 单行注释:以 // 开头,直到该行结束都是注释内容。
例如:
int num = 3; // 这是单行注释
2. 多行注释:以 /* 开头,以 */ 结束,之间的内容都是注释。
例如:
/*
这是一个多行注释
可以有多行内容
*/
int main() {
// 代码
}
在许多 C 语言的集成开发环境(IDE)中,常见的快捷键用于注释和取消注释如下:
以 Visual Studio / Visual Studio Code 为例:
—注释: Ctrl + K + C
—取消注释: Ctrl + K + U
注:具体的快捷键可能因您使用的开发环境和配置而有所不同。
注释的目的是为了提高代码的可读性,便于自己和他人理解代码的功能和逻辑。
二,选择语句
在 C 语言中,有两种主要的选择语句:
if 语句和 switch 语句
1. if 语句
单分支结构:
if (表达式) {
语句;
}
先计算表达式的值,如果该值不为0(即为真),则执行语句。
双分支结构:
if (表达式) {
语句1;
} else {
语句2;
}
当表达式为真时,执行语句1;否则,执行语句2。
多分支结构:
if (表达式1) {
语句1;
} else if (表达式2) {
语句2;
} else {
语句3;
}
首先计算表达式1的值,如果为真,则执行语句1;如果表达式1为假,则计算表达式2的值,若为真则执行语句2;若表达式2也为假,则执行语句3。
2. switch 语句
switch (整型表达式) {
case 整型常量表达式1:
语句1;
break;
case 整型常量表达式2:
语句2;
break;
case 整型常量表达式3:
语句3;
break;
……
default:
语句 n;
break;
}
在程序运行时,首先计算整型表达式的值,然后用该值与后面的各个 case 标签进行匹配(即查看该值是否与 case 标签后的整型常量表达式的值相同)。如果有匹配的 case 标签,则从该 case 标签起,执行后续的语句,直至遇到 break 语句为止。如果没有匹配到 case 标签,则执行 default 标签后的语句,直到遇到 break 为止。
注:
case 后面的表达式必须是整型常量或字符常量。
每个 case 后的语句通常以 break 结尾,以防止继续执行后面的 case 语句。如果没有 break,则会继续执行下一个 case 的语句,直到遇到 break 或 switch 语句结束。
default 部分是可选的,但为了代码的完整性和可读性,建议添加。default 部分的位置可以任意,编译器会先检查所有的 case 标签,若都不匹配才会执行 default 部分的语句。
例如,以下是使用 if...else 语句和 switch 语句的示例代码:
if...else 语句示例:判断学生成绩等级
#include <stdio.h>
int main() {
int scores = 0;
printf("请输入学生成绩: ");
scanf("%d", &scores);
if (scores < 60) {
printf("不及格!\n");
} else if (scores < 80) {
printf("良好!\n");
} else if (scores <= 100) {
printf("优秀!\n");
} else {
printf("输入错误!\n");
}
return 0;
}
switch 语句示例:根据输入的数字输出对应的星期几
#include <stdio.h>
int main() {
int day = 0;
printf("请输入一个数字(1-7): ");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入错误,请输入 1 到 7 之间的数字\n");
break;
}
return 0;
}