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

本章重点介绍

1、函数——strlen(); 

2、关键字——const; 

3、字符串;

4、如何创建和存储字符串;  5、如何使用strlen()函数获取字符串的长度;

5、用C预处理器指令#define和ANSIC的const修饰符创建符号常量; 

6、输入和输出函数:scanf()和printf()。

(下面这个代码很奇怪,VS运行不起来,但是Dev c++就可以运行起来)

屏幕截图 2025-08-27 232420

         注释:1、使用%s转换说明来处理字符串的输入和输出,使用%f是float的转换符。2、用C预处理器#define)把字符常量DENSITY定义为62.4。3、用C函数strlen()获取字符串的长度。4、对于sizeof,它不是函数,是C语言中的一个编译时一元运算符, 用于计算其操作数所占内存空间的大小,单位是字节5char,它是"character"的缩写,中文名叫字符类型,本质上是一个整数类型,主要用于表示和处理单个字符和构建字符串(本例)。

4.2 字符串简介:例如:"Zhang Haili is a kind person."双引号里面是字符串,双引号就是告知编译器它括起来的是字符串,正如单引号用于标识单个字符一样。

4.2.1 char类型和null字符:

屏幕截图 2025-08-29 184443

字符串都被存储在char类型的数组中,数组末尾处的字符\0,这是空字符。C语言用它标记字符串的结束,4.1代码中有40个存储单元的字符串,但只能存储39个字符串,余一个字节留给空字符。char name[40];方括号表明这是一个数组,40表明该数组中的元素数量。

        scanf("%s",name);我输入:Zhang Hali    scanf()只读取Zhang,因为它遇到第一个空白(空格、制表符或换行符)就不再读取输入。scanf()只会读取字符串中的一个单词,而不是一整句。后面会提到 fgets(),也是一个输入函数,用于读取一般字符串。以后再说。

4.2.3 strlen()函数:此函数给出字符串中的字符长度,与sizeof 运算符不同,看下列的代码:

屏幕截图 2025-08-31 215155

   翻译输出:你的名字有5个字母,占据了40个记忆单元。

  name数组的第6个单元存储空字符,strlen()并未计入其中,sizeof()运算符把字符串中的空字符也计入其中,所以它得出来的数为数组的长度。

  %zd转换说明适用于sizeof()和strlen()

  #include<string.h>    其中string.h头文件包含多个与字符串相关的函数原型,包括strlen()。一般地,C把函数库中相关的函数归为一类,并为每类函数提供一个头文件,例如,printf()和scanf()函数都属于标准输入输出函数,使用stdio.h头文件。

4.3常量和预处理器如何创建符号常量? 法一:声明一个变量,然后将变量设置为所需的常量。例如:int house; house=5; 

            法二:预处理器也可以定义常量:例:#define HOUSE 5     程序中所有的HOUSE都会被替换成5,这一过程被称为编译时替换。这样定义的常量也称为明示常量。用大写表示符号常量是习惯,增强可读性,一看就立刻明白这是一个符号常量。*注意:末尾不用加分号。

          #define指令还可以定义字符和字符串常量,前者使用单引号,后者使用双引号。例:1、#define BEEP '\a' 2、#define TEE 'T' 3、#define ESC '\033' 4、#define OOPS "You are a good girl!"

4.3.1 const限定符:用于限定一个变量为只读,声明的是变量,不是常量。例: const int HOUSE=12;  不能改变HOUSE的值!!!(const用起来比#define更灵活)

4.3.2 明示常量:C头文件 limits.h(整数类型)和float.h(浮点类型)略(感觉用不到)

4.4  printf()和scanf() :%d打印整数;%c打印单个字符;%f打印浮点数,十进制;%%打印一个百分号......……%e浮点数,e记数法;

   格式字符串中的转换说明一定要与后面的每一项相匹配,否则,结果无意义。

  %-10d的意思:负号表示左对齐(正号默认是右对齐);10表示字段宽度为10个字符,如果少于10,右侧会用空格填充;如果超过10,会按实际位数输出(不会截断)。

  %10d的意思:正号表示右对齐(默认)。

  %5.2f:打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字。

         屏幕截图 2025-09-03 204055

 屏幕截图 2025-09-04 231014

          %s:输出字符串;%2s:输出2个宽度的字符串;%24.5s:只取前5个字符,宽度为24,左侧填充空格;.5告诉printf()只打印5个字符。

          下面的代码是:写长代码如何断行的示例

#include<stdio.h>
int main(void)
{
	printf("这是一种方式写一个");
	printf("长句子。\n");

	printf("这是一个最新的一种方式写一个"
		"长句子。\n");
	return 0;
}

    4.4.5使用scanf():如果要输入整数2025,就要键入字符2、0、2、5。如果要将其存储为数值而不是字符串,程序就必须把字符依次转换成数值,这就是scanf()要做的。scanf()把输入的字符串转换成整数、浮点数、字符或字符串。(1)如果使用scanf()读取基本变量类型的值,在变量名前加上一个&;(2)如果scanf()把字符串读入字符数组中,不用加&

       1、从scanf()角度看输入:scanf()每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符才开始读取。(自动跳过空白)  

实际上,在C语言中scanf()并不是最常用的输入函数,还有其他输入函数,如getchar()和fgets(),这两个函数更适合处理一些特殊情况。

 

posted @ 2025-08-28 22:31  豆豆豆豆沙包  阅读(14)  评论(0)    收藏  举报