系列文章目录
本章学习任务
1.掌握输入/输出函数。printf()与scanf();
2.C预处理指令
3.定义、使用符号常量
一、字符串简介
字符串是一个或者多个字符的序列。
例如:“zed ding 66"。双引号不是字符串的一部分,只是表示括起来的部分是字符串。
4.1char类型和null字符
C语言没有专门的存储字符串的变量类型,字符串都被存储在char类型的字符数组中,数组由连续的存储单元组成。
请注意
C中的字符串一定以空字符(\0)结束,这意味着数组的容量必须要比需要存储字符串中的字符数多1。
例如”abc de“在内存中是这样存储的。
a | b | c | d | e | \0 |
字符串看上去比较复杂,我们必须先创建一个字符数组,然后才能将字符串中的每个字符逐个放入数组中。
示例
#include <stdio.h>
#define PRAISE "You are an extraordinary being"
int main()
{
char name[20];
printf("What 's your name?");
scanf("%s”,name);
printf("Hello ,%s. %s\n",name,PRAISE);
return 0;
}
上述程序中使用了char数组去存放name,%s告诉printf()打印一个字符串。
注意scanf()在遇到第一个空白(空格、换行符、制表符)的时候就会停止读取输入。
上述程序中
Angela plains
>>Hello Angle. You are extraordinary being.
这是因为名字和姓氏中间有一个空格,scanf()读取姓名的时候遇到了空格然后停止了读取,所以只显示姓。
4.2 strlen()函数
sizeof()运算符以字节为单位给出对象的大小。计算所有字节,包括未使用的字节和\0字符
strlen()函数则会给出字符串中字符的长度。只计算占用字节,不计入\0字符,计入包括空格和标点符号在内的一切字符。
4.3 #define预处理指令
格式: #define NAME value 末尾不能加分号
#define 指令可以定义字符和字符串常量。
#define BEEP '\a'
#define OOPS "Now you have done it!"
说到底#define预处理指令是告诉了编译系统,全文的NAME都将被用 value 直接隐式替代,相当于隐式执行了全文查找和替换功能。
例如:
#define TOES 20
num=i+TOES; (与num=i+20;等价)
但是如果写成 #define TOES =20
那么会变成 num =i+=20;这样肯定是不行的。
4.4 printf()和scanf()
printf()函数和scanf()函数能够让用户可以与程序交流,他们是输入输出函数,或者简称为I/O函数。
4.4.1 printf()函数
printf()函数打印数据的指令要与待打印数据的类型相匹配。
printf("%5d\n",1000); //默认右对齐,左边补空格
printf("%-5d\n",1000); //左对齐,右边补空格
printf("%+d %+d\n",1000,-1000); //输出正负号
printf("% d % d\n",1000,-1000); //正号用空格替代,负号输出
printf("%x %#x\n",1000,1000); //输出0x
printf("%.0f %#.0f\n",1000.0,1000.0)//当小数点后不输出值时依然输出小数点
printf("%g %#g\n",1000.0,1000.0); //保留小数点后后的0
printf("%05d\n",1000); //前面补0
printf("%hhd\n",'A'); //输出有符号char
printf("%hhu\n",'A'+128); //输出无符号char
printf("%hd\n",32767); //输出有符号短整型short int
printf("%hu\n",65535); //输出无符号短整型unsigned short int
printf("%ld\n",0x7fffffffffffffff); //输出有符号长整型long int
printf("%lu\n",0xffffffffffffffff); //输出有符号长整型unsigned long int
4.4.2 scanf()
scanf()把输入的字符串转换成整数、浮点数、字符或者字符串
scanf()函数使用指向变量的指针
而printf()函数使用变量、常量和表达式
以下是使用scanf()函数的两条基本规则
1.如果scanf()读取基本变量类型的值,在变量名前面加上一个&
2.如果是用scanf()读取字符串存入字符数组中,则不需要使用&
#include <stdio.h>
int main()
{
float assets;
int age;
char pet[30];
printf("ENter your age ,assets, and favorite pet .\n");
scanf("%d %f",&age,&assets);
scanf("%s",pet);
printf("%d $%.2f %s\n",age ,assets,pet);
return 0;
}