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

字符串是一个或多个字符的序列,由双引号标识,储存于char类型数组中,数组长度大于等于字符串长度加一。

 \0为空字符,标记字符串的结束,输入时无需刻意打出,为非打印字符。

"x"等于'x'和'\0'

数组是同类型数据元素的有序序列,可看作一行连续的存储单元。

char name[40];        //创建一个有四十个存储单元的char类型数组

strlen()函数:给出字符串中字符的长度(不包括空字符)。位于头文件#include<string.h>中。

相较于strlen(),sizeof()输出的是char型数组的总长度。(如果数组长度大于字符串长度,二者结果即不相同)

常量和C预处理器:

创建常量:

#define TAXRATE 0.015        //在后续代码中,TAXRATE都会被替换为0.015

//大小写不影响运行,但常量大写是C的传统
//此外,在名称前加前缀c_或k_也是一种命名约定,但不常用
const int MONTHS = 12;        //MONTHS在程序中只读而不可更改

明示常量:头文件limits.h和float.h中分别提供了与整数类型和浮点数类型大小显示相关的详细信息,定义了一系列明示常量(在3.11中使用过)。

上表中FLT分别替换为DBL和LDBL,则分别表示double和long double类型对应的明示常量。 

print():

printf("Farewell! thou art too dear for my processing,\n");
//只打印短语或句子不用转换说明
printf("%c%d\n",'$',2 * cost);
//printf使用的是值,无论是变量、常量还是表达式的值
//转换说明应按顺序一一相对应,如若对应错误,则会导致该转换说明结果甚至该语句更多结果出错

 在%和转换字符之间插入修饰符可修饰基本的转换说明

 当输出多行数字,各数字位数不一,可通过使用足够大的固定字段宽度使各列对齐,让格式看起来更美观。 

当不知道数字宽度,又不想留出多余的空白,可指定小于或等于该数字的字段宽度,如%.2f

printf的返回值:printf返回打印字符的个数

n = printf("Hello World!");
printf("上面的printf函数打印的字符数为%d个\n");        //包括空格和换行符(\n)

【大部分C函数都有返回值,返回值可用于计算和参数传递】

printf语句太长时间可以用空白分割不同的部分,可分割的有如下几种状况:

1.双引号外断行

printf("今天的早餐共计%d元",
            yuan);

2.使用多个语句说出一行话,无\n,后面的printf中输出的内容会接着前面的内容。

3.反斜杠加 Enter键:

printf("另一种输出\
方法");
//换行后若不想在该处打印空格代码应从最左边开始

4.在两个双引号之间用空白隔开会被C编译器看做是一个字符串

printf("早上好"    ",吃了么?");
//又或者
printf("早上好"
        ",吃了么?");

scanf函数

1.用scanf()读取基本变量类型的值,在变量名前加&

2.如若读取字符串,不使用&

scanf("%d %d", &a, &b);
scanf("%s",name);

在输入时,为表示是两个变量(如下图:表示是1和2而不是12)可用空格,换行符或制表符把输入的各变量分开(在转换说明为%c时除外),例:

存在正负号时,正负号也可将两个变量区分开。

 【scanf中double的转换说明要加小写字母l修饰符】

double a;
scanf("%lf",&a);

使用多个修饰符时,注意顺序 

 scanf函数读取一个字符后,直到遇到下一个非空白字符才开始读取(转换说明为%c的除外),即遇到空格、制表符或换行符时跳过;如果使用字段宽度,scanf则会在满足字段宽度或遇见空白字符时停止读取一个字符

如果输入内容与转换说明不匹配,该值不会被赋值给变量,而是会被放回输入,在下一次读取输入时,首先读取该值。

当转换说明为%s时,scanf把字符串放入相应数组的同时会在末尾加上'\0'。

[scanf的输入格式]:scanf函数输入时除空格字符外必须与输入字符串严格匹配:

例1:

scanf("%d,%d", &n, &m);
\*
以下格式皆可:
88,121

88, 121

88,
121

例2:

scanf("%d ,%d", &m, &n);
\*
以下格式皆可:
88,121
88 ,121
88 , 121

通常scanf会跳过空白读取,但scanf(" %c",&ch)会从第一个非空白字符开始读取,并将输入中第二个字符赋值给ch

scanf的返回值:scanf函数返回成功读取的项数,在无读取项或者读取内容与转换说明不匹配时返回值为0,在检测到“文件结尾”时,返回EOF

[*在printf()和scanf()中的区别]

在printf()中,*可以用于通过程序指定字段宽度:

scanf("%d", &width);
printf("The number is :%*d\n", width, number);
//前者为字段宽度,后者为待打印数字

在scanf()中,*用于跳过输出项:

scanf("%*d %*d %d",&ch);
//输入1 2 3,跳过前两个,将第三个整数拷贝给ch,ch = 3

版权声明:本文为weixin_65267608原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。