从一个简单的例子开始

#include int main()

{

char name[10];

printf("Input Your Name:\n");

scanf("%s", name);

printf("Your Name is %s\n", name);

return 0;

}

运行结果

C语言没有专门用于储存字符串的变量类型,字符串都被储存在char类型的数组中

数组由连续的存储单位组成,字符串中的字符被储存在相邻的存储单元中,每个单元储存一个字符

字符串末尾有个空字符\0,C语言用它标记字符串的结束,空字符是非打印字符,ASCII码值为0

C语言中的字符串一定以空字符结尾,所以数组的容量必须至少比待存储字符串中的字符数少1

如,声明一个20个存储单位的字符串,它只能存储19个字符,剩下一个字节留给空字符

编译器会在字符串末尾加上空字符

字符串和字符:

字符串用""括起来,字符用''括起来

字符是基本类型(char),字符串是派生类型(char 数组)

字符串由字符和空字符\0组成

strlen()函数:

string.h头文件中包含strlen()函数和其他多个与字符串相关的函数原型

strlen()函数给出字符串中的字符长度,不把空字符算入,但包括空格和标点符号,sizeof把字符串结尾的空字符也算入

strlen()函数占位符用%zd,如果编译器不识别%zd,就用%u或%lu

定义常量:

格式:#define 符号常量名 常量的值

#define NAME jack

末尾不用加分号

符号常量的命名规则和变量相同,常量名最好用大写

const限定符:

const关键字用于限定一个变量为只读,也就是只能使用,不能修改

const char name = 'Jack';

name变成了只读的变量

转换说明及其打印的输出结果

转换说明

输出

%a

浮点数、十六进制数和p记数法(C99/C11)

%A

浮点数、十六进制数和p记数法(C99/C11)

%c

单个字符

%d

有符号十进制整数

%e

浮点数,e记数法

%E

浮点数,e记数法

%f

浮点数,十进制记数法

%g

根据值的不同,自动选择%f或%e。%e格式用于指数小于-4或者大于或等于精度时

%G

根据值的不同,自动选择%f或%E。%E格式用于指数小于-4或者大于或等于精度时

%i

有符号十进制整数(和%d相同)

%o

无符号八进制整数

%p

指针

%s

字符串

%u

无符号十进制整数

%x

无符号十六进制整数,使用十六进制数0f

%X

无符号十六进制整数,使用十六进制数0F

%%

打印一个百分号

格式字符串中的转换说明一定要与后面的每个项相匹配

printf()中的标记

标记

含义

-

待打印项左对齐

+

有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号

空格

有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记覆盖一个空格

#

把结果转换为另一种格式。如果是%o格式,则以0开始;如果是%x或%X格式,则以0x或0X开始;对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G格式,#防止结果后面的0被删除

0

对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记

示例

#include int main()

{

char one_size = 'M';

int two_num = 13;

int three_num = -15;

int four_num = 124;

int five_num = 25;

printf("*%-20c*\n", one_size);

printf("*%+d*\n", two_num);

printf("*% d*\n", three_num);

printf("*%#x*\n", four_num);

printf("*%010d*\n", five_num);

return 0;

}

运行结果

printf()的转换说明修饰符

修饰符

含义

标记

上表

数字

最小字段宽度,如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段

.数字

精度。

对于%e,%E和%f转换,表示小数点右边数字的位数

对于%g和%G转换,表示有效数字最大位数

对于%s转换,表示待打印字符的最大数量

对于整型转换,表示待打印数字的最小位数

如有必要,使用前导0来达到这个位数

只使用.表示其后跟随一个0,所以%.f和%.0f相同

h

和整型转换说明一起使用,表示short int或unsigned short int类型的值

hh

和整型转换说明一起使用,表示signed char或unsigned char类型的值

j

和整型转换说明一起使用,表示intmax_t或uintmax_t类型的值。这些类型定义在stdint.h中

l

和整型转换说明一起使用,表示long int或unsigned long int类型的值

ll

和整型转换说明一起使用,表示long long int或unsigned long long int类型的值

L

和浮点转换说明一起使用,表示long double类型的值

t

和整型转换说明一起使用,表示ptrdiff_t类型的值。ptrdiff_t是两个指针差值的类型

z

和整型转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型

对于浮点类型有用于double和long double类型的转换说明,却没有float类型的,这是因为无论在K&R C还是ANSI C,float类型被自动转换成double类型,所以都没有显示float类型值专用的转换说明

转换说明把以二进制格式储存在计算机中的值转换成一系列字符(字符串)以便于显示

printf()函数的返回值:

printf()函数也有一个返回值,它返回打印字符的个数

如果有输出错误,printf()则返回一个负值

#include int main(void)

{

int rev;

rev = printf("Hello World!\n");

printf("%d\n", rev);

return 0;

}

运行结果

参数传递:

程序把传入的值放入被称为栈的内存区域

计算机根据变量类型(不是根据转换说明)把这些值放入栈中

printf()函数根据转换说明(不是根据变量类型)从栈中读取值

scanf()函数:

如果用scanf()读取基本变量类型的值,在变量名前加上一个&

如果用scanf()把字符串读入字符数组中,不用&

从scanf()角度看输入:

如果scanf()使用%d转换说明读取一个整数,scanf()函数每次读取一个字符,跳过所有的空白字符,直到遇到第1个非空白字符才开始读取

scanf()函数如果找到一个数字或符号(+或-),它便保存该字符,并读取下一个字符。

如果下一个字符是数字,它就保存该字符并读取下一个字符。

scanf()会不断地读取和保存字符,直到遇到非数字字符。

如果遇到非数字符号,scanf()就认为读到了整数的末尾。

然后,scanf()就把非数字字符放回输入,程序在下一次读取输入的时候,首先会读取丢弃的非数字字符。

最后,scanf()计算已读取数字(可能还有符号)相应的数值,并将计算后的值放入指定的变量中

如果使用字段宽度,scanf()会在字段结尾或第一个空白字符处停止读取

使用%s转换说明,scanf()只能读取一个不包含空白字符的单词,无法利用字段宽度让只有一个%s的scanf()读取多个单词

当scanf()把字符串放进指定数组中时,它会在字符序列的末尾加上空字符\0,让数组中的内容成为一个C字符串

scanf()函数所用的转换说明与printf()函数几乎相同。主要区别是,对于float类型和double类型,printf()都使用%f,%e,%E,%g和%G转换说明,而scanf()只把它们用于float类型,对于double类型要使用l修饰符

scanf()的返回值:

scanf()函数返回成功读取的项数

如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串,scanf()便返回0

当scanf()检测到“文件结尾”时,会返回EOF(EOF是stdio.h中定义的特殊值,通常用#define指令把EOF定义为-1)

scanf()的*修饰符:

把*放在%和转换字符之间时,会使得scanf()跳过相应的输出项

#include int main(void)

{

int n;

printf("Input Three integers\n");

scanf("%*d, %*d, %d", &n);

printf("The Last Interger is %d\n", n);

return 0;

}

运行结果

c语言中使用的字符常量 其起止标记,C Primer Plus学习笔记(三)- 字符串和格式化输入/输出...相关推荐

  1. c语言中使用的字符常量其起止标记符是,2021国家开放大学电大本科《C语言程序设计》期末试题及答案(试卷号:1253)...

    <2021国家开放大学电大本科<C语言程序设计>期末试题及答案(试卷号:1253)>由会员分享,可在线阅读,更多相关<2021国家开放大学电大本科<C语言程序设计& ...

  2. C语言字符串0x,0X04 字符串跟格式化输入/输出

    0X04 字符串和格式化输入/输出 字符串(character string)就是一个或多个字符的序列.如:"hello world",双引号不是字符串的一部分,而是通知编译器,这 ...

  3. C语言基础之4:字符串和格式化输入/输出

    Tips1 函数:strlen() 关键字:const 字符串 如何创建.存储字符串 如何使用strlen()函数获取字符串的长度 用C预处理器指令#define和ANSIC的const修饰符创建符号 ...

  4. c语言格式化输入字符型,C语言——字符串和格式化输入/输出

    今天,学习了C Primer Plus的第四章.本章讲解了一些简单的C预处理器的知识,一些字符.字符串以及数组等相关概念以及输入输出函数的使用. 现将知识点总结如下: 字符串:一个或多个字符的序列(双 ...

  5. C语言学习(四)字符串和格式化输入/输出

    程序清单4.1 talkback.c程序 // talkback.c -- 演示与用户交互 #include <stdio.h> #include <string.h> // ...

  6. c++ 数组的输入遇到特定字符停止输入_C语言 第4章-字符串和格式化输入/输出

    #include 用数组name储存字符串,name数组有40个字节,每个字节储存一个字符值. 在scanf()函数中,输入字符串name没有&前缀. C预处理器把字符常量DENSITY定义为 ...

  7. C 语言——字符串和格式化输入/输出

    一.字符串  1.char数组类型和空字符 c没有为字符串定义专门的变量类型,而是把它存储在char数组中. 将数组看成是一行中的多个存储单元,字符串中的每个字符占用一个字符,最后一个位置显示空字符\ ...

  8. C语言sscanf()函数(从字符串读取格式化输入,提取需要的信息)

    需包含头文件:C 标准库 - <stdio.h> 文章目录 描述 声明 参数 返回值 实例 我在VS上测试(VS上要用sscanf_s) 示例1 示例2(提取时能默认以空格分割) 描述 C ...

  9. C语言学习笔记--删除字符串中特定的字符

    题目:输入一个长度不超过100的字符串,然后输入一个字符,通过程序将字符串中该字符删除并输出最后的字符串,要求字符串存放在数组中,字符串的输入与输出,在主函数中实现删除字符,在自定义函数deletec ...

最新文章

  1. 网络营销第三课:利用织梦搭建动态网站(2)
  2. Sqlite数据库相关
  3. 此windows副本不是正版解决方法
  4. 线性表的链式存储结构(C语言版)
  5. codeforces773 D. Perishable Roads(思维+最短路)
  6. oracle出现The Network Adapter could not establish the connection的问题
  7. python计算速度_python中如何提高计算速度?
  8. 恐怖!Spring Boot “内存泄漏”,排查竟这么难!
  9. 前端之品优购项目(一)
  10. Adobe Photoshop 中的魔棒工具
  11. 如何进行积分墙投放,怎么选积分墙公司
  12. Linux查看ip 地址命令(ip addr)
  13. macOS连接ftp服务器
  14. Vulkan学习(三):小结
  15. 爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
  16. xiaomi 小米6刷ubuntu touch
  17. android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...
  18. 【编译原理】词法分析器语法分析器
  19. 如何查看 /dev/sda 下的文件
  20. AndroidWear 手持设备与穿戴设备的通知同步

热门文章

  1. 0英文基础能学计算机编程么,我零基础,英语和数学都不好,能学会编程吗?...
  2. 看史上最牛的夫妻生活协议书
  3. arrive at/agree with/account for等动词词组
  4. 腾讯技术解读|CDG—金融科技和腾讯广告AMS的神秘武器
  5. COS系统安装-图片版
  6. PTA(二十五) 算法设计与分析 第七章 贪心法 7-1 装箱问题 (20 point(s))
  7. 公司无线WIFI解决方案
  8. 管理运筹学笔记一之图解法
  9. 【小程序源码】字体设计符号组合多功能
  10. [二分法]leetcode2187:完成旅途的最少时间(medium)