第四章_字符串和格式化输入输出

第四章 字符串和格式化输入输出

  1. 使用字符数组(array)储存字符串
// 示例程序
#include 
#include  //提供strlen()函数的原型
int main() {
    char name[50];
    printf("输入名字\n");
    scanf("%s", name);
    printf("你的名字是:%s\n", name);

    //sizeof查看容量
    int size = sizeof name;
    printf("数组容量size:%d\n", size);

    //string.h中的strlen()函数,查看字符串长度
    printf("字符串长度为%ld\n", strlen(name));
}
  • 用字符数组(array)储存字符串,该数组在内存中占用连续的50个字节,每个字节存储一个字符。
  • 使用 %s 做为输入输出的占位符,注意,在scanf中,name变量没有&前缀,而数字类型的变量有。
  • 使用 string.h 中的 strlen() 函数获取字符串长度。
// 运行结果
输入名字
sunjian
你的名字是:sunjian
数组容量size:50
字符串长度为7
  1. 字符串简介

    C语言没有专门用于储存字符串的变量类型,字符串都被储存在char类
    型的数组中。数组由连续的存储单元组成,字符串中的字符被储存在相邻的
    存储单元中,每个单元储存一个字符。

​ 注意字符串最后一位的 \0 ,这是C语言标记字符串的结束,占用一个单元,所以长度为50的数组只能存储49个字符。数组的容量至少要比待存储的字符数多 1 位。

​ scanf在读取字符串时,遇到空白符(空格,制表符或换行符)就不再继续读取输入,例如输入Cris Paul, scanf("%s",name) 只会读取到Cris。C语言还有其他的输入函数可以读取字符串,后面会学习到。

​ 注意定义字符和字符串的区别,字符是基本类型(char),字符串是派生类型(char 数组),区别如图。

​ sizeof() 函数返回的是该数组有多少个存储单元,strlen() 返回的是字符串的长度(不包含结束符 \0)。strlen() 知道在何处停止。

圆括号的使用时机否取决于运算对象是类型还是特定量?运算对象是类型时,圆括号必不可少,但是对于特定量,可有可无。也就是说,对于类型,应写成sizeof(char)或sizeof(float);对于特定量,可写成sizeof name或sizeof 6.28。尽管如此,还是建议所有情况下都使用圆括号,如sizeof(6.28)。

  1. const 限定符

    const限定符用于限定一个变量为只读(是只读变量,不是常量),const 用起来比 #define更加灵活。

const int MONTHS = 12; // MONTHS在程序中不可更改,值为12
  1. 明示常量

引入头文件 ,输出INT_MAX和INT_MIN,可以查看当前系统下int 的最大值和最小值。

#include 
#include 

int main() {
    printf("int最大值是:%d",INT_MAX);
    printf("int最小值是:%d",INT_MIN);
}

下面是在64位系统下的输出

int最大值是:2147483647
int最小值是:-2147483648

​ 类似地,float.h头文件中也定义一些明示常量,如FLT_DIG和DBL_DIG,分别表示float类型和double类型的有效数字位数。表中所列都与float类型相关。把明示常量名中的FLT分别替换成DBL和LDBL,即可分别表示double和long double类型对应的明示常量(表中假设系统使用2的幂来表示浮点数)

  1. printf() 函数

printf的占位符如下:

注意:printf()函数使用%符号来标识转换说明,因此打印%符号就成了个问题。如果单独使用一个%符号,编译器会认为漏掉了一个转换字符。解决方法很简单,使用两个%符号就行了:

pc = 2*6;
printf(" %d%% \n", pc);

输出结果为 : 12% 。

下面是占位符的修饰符及含义:

下表为 printf() 中的标记

  1. scanf() 函数
  • 如果使用scanf() 读取基本变量类型的值,在变量名前加上一个 & ;
  • 如果使用scanf() 读取字符串,不使用 & 。
  • scanf() 使用空白(换行符、制表符、空格)把输入分为多个字段(唯一例外的是 %c 会读取包含空白在内的每个字符)。
#include 
// 示例程序
int main() {
    char name[100];
    int age;
    float weight;

    printf("请输入你的姓名,年龄,体重\n");
    scanf("%s  %d   %f", name,&age,&weight);
    
    printf("所以,你的姓名是%s,年龄是%d,体重是%f\n",name,age,weight);
    return 0;
}
//运行结果
请输入你的姓名,年龄,体重
sunjian    23   75.0
所以,你的姓名是sunjian,年龄是23,体重是75.000000

​ 下表是scanf() 的转换说明




你可能感兴趣的:(第四章_字符串和格式化输入输出)