字符串和格式化输入、输出

一、 字符串简介

1.1 字符串简介

字符串(character string)是一个或者多个字符的序列,如下所示:

" HUAWEI NB!"

双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符串,正如单引号用于标识单个字符一样。

1.2 char类型数组和null字符

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

数组末尾位置的字符 \0,这个是空字符(null character)。C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符数多去1。那么什么是数组?可以把数组看作是一行连续的多个存储单元。用正式的说法是,数组是同类型数据元素的有序序列。

1.3 使用字符串

/* praise1.c————使用不同类型的字符串 */
#include <stdio.h>
#define PRAISE "You are an extraordinary being."

int main()
{
    char name[40];

    printf("What's your name?");
    scanf("%s",name);
    printf("Hello,%s. %s\n",name,RPAISE);

    return 0;
}

%s告诉printf()打印一个字符串。%s出现了两次,因为程序要打印两个字符串:一个存储在name数组中;一个由PRAISE来表示。运行praisel1.c,其输出如下所示:

what's your name? Angela Plains

Hello,Angela. You are an extraordinary being.

你不用亲自把空字符放入字符串末尾,scanf()在读取输入时就已完成这项工作。也不用在字符串常量PRAISE末尾添加空字符。稍后解释#define指令,现在先理解PRAISE后面用双引号括起来的文本是一个字符串。

注意(这很重要):scanf()只读取了Angela Plains中的Angela,它在遇到第1个空白(空格、制表符或者换行符)时就不再读取输入。因此,scanf()在读到Angela和Plains之间的空格时就停止了。一般而言,根据%s转换说明,scanf()只会读取字符串中的一个单词,而不是一整句。C语言还有其他的输入函数(如:fgets()),用于读取一般字符串。

1.4 strlen()函数

sizeof运算符,它以字节为单位给出对象的大小。strlen()函数给出字符串中的字符长度。

 

二、 常量和C预处理器

#define PI 3.14159

使用字符常量的好处:

① 常量名比数字表达的信息更多;② 修改时非常方便,比如税率是经常浮动的,如果程序使用字符常量,则只需要更改符号常量的定义,不用在程序中查找使用常量的地方,然后逐一修改。

2.1 const限定符

C90标准增加了const关键字,用于限定一个变量为只读。其声明如下:

const int MONTHS = 12; //MONTHS在程序中不可修改,值为12

这使得MONTHS成为一个只读值。也就是说,可以在计算中使用MONTHS,可以打印MONTHS,但是不能更改MONTHS的值。const用起来比#define更灵活。(#define是常量,而const声明的是变量)

2.2 明示常量

#define INT_MAX +32767

#define INT_MIN  -32768

C头文件 limits.h 和 flost.h 分别提供了与整数类型和浮点类型大小限制相关的详细信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值