"hello world\n"这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
#include <stdio.h>
#include <string.h>
int main()
{
printf("hello bit\n");
char arr1[] = "abc";//[]中是这个数组内有多少个字符,因此此处是4,因为\0算作一个字符,而字符串的结束标志是一个 \0 的转义字符。
char arr2[] = { 'a', 'b', 'c', '\0' };//[]中是这个数组内有多少个字符,因此此处是4。
//string length 字符串长度
//strlen是库函数,是专门求字符串长度的函数;所以在一开始要加上#include <string.h>
printf("%d\n", strlen(arr1));//3
printf("%d\n", strlen(arr2));//3
printf("%s\n", arr1);//%s是打印字符串,遇到\0打印自然结束
printf("%s\n", arr2);
return 0;
}
tips: (i)\0算作一个字符 (ii)字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
假如我们要在屏幕上打印一个目录: c:\code\test.c,我们该如何写代码?
#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
但实际上程序运行的结果是这样的:
这里就不得不提一下转义字符了,转义字符顾名思义就是转变意思。 下面我们就来看一些转义字符:
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量’ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 清屏并换页符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字 |
\xdd | dd表示2个十六进制数字 |
#include <stdio.h>
int main()
{
printf("(are you ok??)");//这样写实际打印出来是(are you ok]
printf("(are you ok\?\?)");//这样写实际打印出来才是(are you ok??)
return 0;
}
附: 在ANSI C标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符。由于一些非常老式的键盘上没有[]{}#^~|这些字符,因此在C语言中规定了9个三字母词与其对应。
三字母词 | 对应的字符 |
---|---|
??= | # |
??( | [ |
??) | ] |
??< | { |
??> | } |
??/ | / |
??! | | |
??’ | ^ |
??- | ~ |
#include <stdio.h>
int main()
{
printf("%c\n",'\'');
return 0;
//%c - 打印字符,且是单个字符
//%d - 打印整型
//%f - 打印浮点数(小数)
//%s - 打印字符串
}
#include <stdio.h>
int main()
{
printf("%s\n","\"");
return 0;
}
#include <stdio.h>
int main()
{
printf("c:\\code\\test.c");//\t是一个转义字符,为了不让\是\t中的\,则需在\前再加一个\,以此来转义\;在一个路径里面你想要一个\,那就要写出两个\
return 0;
}
#include <stdio.h>
int main()
{
printf("\a");
return 0;
}
#include <stdio.h>
int main()
{
printf("123456\r789");//打印出来是789456
return 0;
}
#include <stdio.h>
int main()
{
printf("123\v456");
return 0;
//打印出来是
//123
// 456
}
\ddd中的ddd表示1-3个八进制的数字。130这个8进制数字转成10进制数字,作为ASCII码值,表示的字符就是‘X’。
附:
\xdd中的dd表示2个十六进制数字。30这个16进制数字转成10进制数字,作为ASCII码值,表示的字符就是‘0’。 附:
注释有两种风格:
#include <stdio.h>
int main()
{
int input = 0;
printf("要好好学习吗?(1/0)");
scanf("%d", &input);
if(input == 1)
{
printf("好offer\n");
}
else if(input == 0)
{
printf("卖红薯\n");
}
return 0;
}
C语言中如何实现循环呢?
#include <stdio.h>
int main()
{
int line = 0;
while (line < 20000)
{
printf("写代码:%d\n", line);
line++;
}
if (line == 20000)
printf("好offer\n");
return 0;
}
函数的特点就是简化代码,代码复用。
要存储1-10的数字,怎么存储? C语言中给了数组的定义:一组相同类型元素的集合
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
int arr1[10] = {1,2,3};//不完全初始化,只初始化前3个,剩余的初始化为0
int arr2[10];//这样写也是可以的,只是数组中的值是随机值
int arr3[] = {1,2,3};//这样写也是可以的,[]中默认是3
int arr4[];//这样写是错误的
int n = 10;
int arr[n];//C99标准中 变长数组,允许数组在创建的时候,数组大小用变量指定,但是这种数组不能初始化
return 0;
}
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。数组可以通过下标来访问。
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[8]);//打印出来是9
return 0;
}
附:
int arr[10] = {1,2,3,4,5,6,7,8,9,10} | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
#include <stdio.h>
int main()
{
int arr[10];
//输入0~9
int j = 0;
while (j < 10)
{
scanf("%d", &arr[j]);
j++;
}
//输出0~9
int i = 0;
while (i < 10)
{
printf("%d ", arr[i]);
i++;
}
return 0;
}