字符串
字符串是一系列被视为一个处理单元的字符,在 C 语言中,字符串是以空字符位结尾的一系列字符,它存储在字符数组中。
C 预处理器
C 预处理器为预处理指令(以 # 符号开始)查找源代码程序,在开始编译程序之前处理它们,如 #include 指令、#define 指令。
printf() 和 scanf()
输入输出函数能让用户与程序交流,它们是输入输出函数,或简称 I/O 函数。
getchar() 与 scanf()
getchar 读取每个字符,包括空格、制表符和换行符;而 scanf 在读取数字时则会跳过空格、制表符和换行符。
代码示例
输出函数练习
#include<stdio.h>
#include<string.h>
//define 通过预处理器定义常量,编译时进行替换
#define PRAISE "You are an extraodinary being" //编译器会在末尾加上空字符 \0
#define PAGES 959
#define BLURB "Authentic imitation"
#define PAGES 336
#define WORDS 65618
int main(void) {
char name[40]; //C 语言的字符串存储在字符数组中
int a = 0;
const double RENT = 3852.99; //const 限定一个变量只读
short num = PAGES;
short mnum = -PAGES;
float n = 3.0;
double n1 = 3.0;
long n2 = 2000000000;
long n3 = 1234567890;
printf("What is your name ?");
scanf_s("%s",name,sizeof(name)); //输入时自动把空字符 \0 放入字符串末尾并只读一个单词
printf("Hello,%s.%s\n", name, PRAISE);
//strlen() 空字符不计入,sizeof() 空字符也会计算在内
printf("strlen() = %zd,sizeof = %zd\n", strlen(name), sizeof(name));
//printf 函数格式:printf(格式字符串,待打印项1,待打印项2,...);
//格式字符串包含每个待打印项对应的转换说明,用双引号括起来,
//字段宽度打印整型时效果
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES); //字段宽度自动扩大以符合整数长度
printf("*%10d*\n", PAGES); //10个空格宽度
printf("*%-10d*\n", PAGES); //数字位于字段左侧
//浮点型修饰符的组合
printf("\n");
printf("*%f*\n", RENT); //宽度和为数为系统默认设置,6位
printf("*%e*\n", RENT); //科学记数法
printf("*%4.2f*\n", RENT); //最小宽度 4,保留 2 位小数
printf("*%3.1f*\n", RENT); //四舍五入,最小宽度 3,保留 1 位小数
printf("*%10.3f*\n", RENT); //最小宽度 10,保留 3 位小数
printf("*%10.3E*\n", RENT); //科学记数法
printf("*%+4.2f*\n", RENT); //代数符号 +
printf("*%010.2f*\n", RENT); //第一个 0 是标记,小数点之前指定字段宽度
//格式标记
printf("\n");
printf("%x %X %#x\n", 31, 31, 31); //十六进制数,带符号十六进制数
printf("%5.3d,%5.3f\n", 6, 6.0); //整数保留三位,小数点后保留三位
printf("%05d,%05.3d\n", 6, 6); //0 标记用 0填充字段宽度,0与精度出现会被忽略
//字符串格式
printf("[%2s]\n",BLURB); //字段被扩大容纳字符串中所有字符
printf("[%24s]\n", BLURB); //24 宽度
printf("[%24.5s]\n", BLURB); //只打印 5 个字符
printf("[%-24.5s]\n", BLURB); //左对齐打印五个字符
//转换格式打印
printf("-num %hd,unsigned short %hu\n", mnum, mnum); //无符号打印 65536 - 336
printf("num as char:%c\n", num); //取后 1 个字节,除以 256 余 80 是字符 P
printf("%ld %ld %ld \n", n,n1,n2); //n,n1,n2 顺序存放栈内,根据转换类型取字节
return 0;
}
输入函数练习
#include<stdio.h>
int main(void) {
//scanf() 读取基本变量类型前加 &
// 字符串读入字符数组中不加 &
int age;
float assets;
char pet[30];
double number = 256.6;
int width;
printf("Enter your age,assets,and favorite pet.\n");
scanf_s("%d %f", &age, &assets);
scanf_s("%s", pet,20);
printf("%d $%.2f %s\n", age, assets, pet);
//printf() 函数中用 * 修饰符代替字段宽度
scanf_s("%d", &width);
printf("number = %*.*f\n", width, width, number);
//scanf() 函数中 * 修饰符是跳过相应的输出项
scanf_s("%*d%*d%d", &width);
printf("The last integer was %d\n", width);
return 0;
}