C-字符串和格式化输入\输出
1.字符串是一个或多个字符序列。字符串常量用双引号括起来“abc”,字符常量用单引号括起来‘’。
2.数组是同一类型的数据元素的有序序列。数据元素在内存中是连续存储的。
C中没有为字符串定义专门的变量类型,而把它存储在char数组中。
C的字符串存储通常以空字符‘\0’结束。空字符不是数字0,而是ASCII码为0的非打印字符,用来标记字符串的结束。空字符的存在意味着,char数组长度必须比要存储的字符数多1。
char name[10];//声明了一个长度为10的字符数组。
#define NAME "gaotian"
scanf("%s",name);
printf("%s,%s",name,NAME);
3.scanf(),%s开始读取输入之后,会在遇到第一个空白字符(空格,制表符\t,换行符\n)处停止读取。
4.字符串和字符的区别
字符‘x’是基本数据类型。字符串“x”是衍生数据类型char数组。“x”其实包含两个字符,‘x’和‘\0’。
5.sizeof()运算符以字节为单位给出数据或类型的大小。strlen()函数以字符为单位给出了字符串的长度。对于同一个字符串常量,sizeof会把‘\0’计算在内,因为它也占了内存,而strlen不会。
6.符号常量
程序中需要用到常量时,应使用符号常量,一是可读性高,二是方便修改。
四种方式:
-声明一个变量,再赋值为所需的常量。
int age=12;
-预处理命令定义符号常量(#define 符号名 常量值)
注意:
末尾没有分号;不属于C语句
符号名通常全大写
编译时,符号名后面的所有内容将被用来替换符号名出现的地方
这样定义的常量被称为明显常量。
#define NAME “gaotian”
#define AGE 12
-const修饰符
将变量声明为只读,可以读取用于显示和计算,不能被修改。
const int AGE = 12;
-枚举类型enum
7.C头文件limits.h和float.h中提供了关于了整型和浮点型大小限制的详细信息。定义了一系列的明显常量。
8.printf()-读取,解释,转换(数值转换成字符串文本),打印
printf(),scanf()称为输入/输出函数或I/O函数。互为逆操作。
printf(),scanf()都是有了控制字符串(前者是要打印的字符和转换说明符;后者是格式字符串(转换说明符,普通字符))和参数列表(前者是变量,常量,表达式;后者是指向变量的指针)。
printf()打印的是字符串文本,scanf()接收的也是字符串文本(即键盘输入的是字符串文本)。
参数列表中变量的类型决定数据存储的方式。控制字符串中的转换说明符决定数据读取的方式,指定数据显示的形式。
注意:格式说明符和变量的个数和类型必须一一对应。
printf()中的转换说明符:
%a,%A 浮点数,十六进制数,p-计数法
%e,%E 浮点数,e-计数法
%f 浮点数,十进制计数法
%g,%G 根据数值不同,自动选择%f,%e,%E。%e,%E在指数小于-4,大于等于精度时使用。
%c 一个字符
%s 字符串
%p 指针
%d ,%i 有符号十进制整数
%u 无符号十进制整数
%o 无符号八进制整数
%x,%X 无符号十六进制整数
%% 打印一个%
printf()中的修饰符(转换说明符的修饰符):
- 左对齐
+ 有符号的值若为正,显示+号;若为负,显示-号
(空格)有符号的值若为正,显示带前导空格;若为负,显示-号;+修饰符会覆盖(空格)修饰符
# 对于%o格式,以0开头;对于%x,%X格式,以0x,0X开头;对于所有浮点数格式,#保证即时不跟任何数字,也打印一个小数点字符;对于%g,%G,#防止尾随零被删除。
0(零)对于所有数字格式,用前导零而不是空格填充字段宽度。若出现了-修饰符或指定了精度,则忽略该修饰符
digit(s)字段的最小宽度
.digit(s) 精度。对于%e,%E,%f,表示小数的右边的数字位数。对于%g,%G,表示有效数字的最大位数。对于%s,表示字符串中的最大长度。对于整数格式,表示数字的最小位数,不够填充前导零。注意.和.0等同。
h 和整数转换说明符一起用,表示short int ,unsigned short int
hh 和整数转换说明符一起用,表示short char ,unsigned short char
l 和整数转换说明符一起用,表示long int ,unsigned long int
ll 和整数转换说明符一起用,表示long long int,unsigned long long int
L 和浮点数转换说明符一起用,表示long double
z 和整数转换说明符一起用,表示一个size_t值(sizeof返回值的类型)
t 和整数转换说明符一起用,表示一个ptrdiff_t值(两指针差值的类型)
注意:有用于打印double型和long double型的转换说明符,但没有float型的转换说明符。因为,C中符点型默认时double型,float型会自动转换为double型。
printf()会按照转换说明符表示的数据类型的占位大小和存储方式对计算机中二进制数值进行读取和解释,并转换成一系列字符(字符串),以便显示。不改变原值,只是指定不同的表现形式。
C中的函数一般都有返回值。就是由函数计算返回给调用程序的值。
printf()返回值:正常,返回所打印的字符的个数,包含所有打印字符,包括空格和换行符。错误,返回一个负数。
printf()打印长字符串:
空白字符(空格,制表符,换行符)若不是用来分隔元素,C都将忽略。
四种方式:元素间回车(不能在引号括起来的字符串中间断开);使用多个printf()语句,最有一个包含‘\n’;反斜杠\+回车;字符串连接法(两个字符串间仅用空白字符分隔,C会组合成一个字符串处理)
9.scanf()-读取(逐个字符读取),转换(字符串文本转换成数值),解释,存储
scanf()读取基本数据类型,变量名前加&(取地址符);读取字符数组,不加&;
scanf()根据空白字符将输入分成多个字段,并依次把转换说明符和字段相匹配。
scanf()中的转换说明符:
%e,%E,%f,%F,%g,%G,prinft()用于float和double,scanf()只用于float。
%c 解释为一个字符
%s 解释为一个字符串,从第一个非空白字符起,到下一个空白字符止。
%d,%i 解释为一个有符号的十进制数
%u 无符号的十进制数
%o 有符号的八进制数
%x,%X 有符号的十六进制数
%p 一个指针(地址)
%a,%A 浮点型
%e,%E,%f,%F,%g,%G float浮点数(仅float,对于double需加l修饰符,对于long double需加L修饰符)
scanf()的转换修饰符:
* 滞后赋值,丢弃对应读取内容
digit(s)最大字段宽度,在达到最大字段宽度或遇到空白字符时,停止对输入项的读取
h %hd,%hi,表示会存储在short int;%hu,%ho,%hx表示会存储在unsigned short int;
hh 把整数读作signed char,unsigned char
l %ld,%li long;%lu,%lo,%lx unsigned long;%le,%lf,%lg double;%Le,%Lf,%Lg long double;
ll 把整数读作long long ,unsigned long long
如果没有这些修饰,d,i,o,x指int型;e,f,g指float型。
scanf()输入原理:
scanf的转换说明符提供了要读取的数据类型信息,每个数据类型的表示所需的字符构成特定的字符集内,如%d对应有符号十进制整数,字符集是{0,1,2,3,4,5,6,7,8,9,-,+}。
scanf逐个字符的读取输入字符串,跳过空白字符,直到遇见第一个非空白字符,若在特定字符集内,读取保存,继续扫码下一个字符,直到遇到第一个非特定字符集字符,scanf结束读取,并将最后读取的非特定字符集字符放回输入。最后,scanf将它读取的字符串转换解释成数值,存入指定变量中;若第一个非空白字符就是非特定字符集字符,scanf()会停在那里,并把读取的字符放回输入,不会读取下一个字符,指定的变量中也不会被赋上任何值。下一个scanf()依然会从这个字符开始读取。
空白字符,非特定字符集字符,字段宽度,读取到输入内容末尾都是scanf()停止读取的条件。
scanf读取%s时,会在字符串最后添加‘空字符\0’,再存入char数组,使之成为C字符串。
scanf读取%c时,所有字符平等读取,包括空白字符也会读取。
scanf()的格式字符串中可以有普通字符。除了空格字符外,你的格式字符串一定要与输入字符串精确匹配。如scanf(%d,%d);你必须输入12,345或12, 345,12后面必须紧跟逗号‘ ,’不能有空格。在格式串中的空格表示跳过下一个输入项之前的任何空格。scanf(%d, %d);你可以输入12,345;12 ,345;12 , 345;
scanf()返回值:返回成功读取的项目的个数;什么都没读取,返回0;读取到文件结尾,返回EOF。
转换说明符的修饰符*,在printf()中,可用*表示可变的字段宽度,在参数列表中需要对应的变量。在scanf()中表示丢弃读取的对应项。
C-字符串和格式化输入\输出的更多相关文章
- 重学C语言---04字符串和格式化输入/输出
1.程序示例 //talkback.c一个能为你提供一些信息的对话框 #include <stdio.h> #include <string.h> //提供strlen函数原型 ...
- C Primer Plus学习笔记(三)- 字符串和格式化输入/输出
从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...
- 【C语言学习】《C Primer Plus》第4章 字符串和格式化输入/输出
学习总结 1.String str=”hello world!”;(Java),char[20]=” hello world!”;(C).其实Java字符串的实现,也是字符数组. 2.字符串的尾部都会 ...
- C Primer Plus 第4章 字符串和格式化输入/输出 编程练习
1. #include <stdio.h> int main(void) { ]; ]; printf("请输入您的名字: "); scanf("%s&quo ...
- Java字符串的格式化与输出
Java字符串的格式化与输出 在C语言中格式化输出能够通过printf()函数实现,在Java中无需借助第三方工具相同能够实现此功能.自Java SE5后,java也提供了C语言中printf()风格 ...
- c语言学习笔记第四章——字符串和格式化输入、输出
B站有视频演示 本章学习printf函数的输入输出,字符串的定义与实用. 字符串 字符串(character string)是一个或多个字符的序列,如下所示: "Zing went the ...
- java 日期的格式化 输入/输出
想要得到形如2018.07.09的格式化好的当天日期 创建Date对象,调用SimpleDateFormat对象的format方法: indexstr="logstash-"+ne ...
- 《C语言程序设计现代方法》第3章 格式化输入/输出
完整的细节将留到第22章中介绍. 调用printf函数一次可以打印的值的个数没有限制. 注意:C语言编译器不会检查格式串中转换说明的数量是否和输出项的数量相互匹配,也不会检查转换说明是否适合要显示项的 ...
- Day1-用户输入及字符串格式化输入
1.用户输入--input和getpass函数 2.字符串的格式化 ############################################# 一.用户输入--input()函数 #! ...
随机推荐
- 与swift协议相关的技术
一.协议定义与实现: 1.关联类型: 2.协议组合: 3.协议扩展: 4.协议实现. 二.协议使用:
- C# 去掉代码前边空格(格式化代码)
private void button1_Click(object sender, EventArgs e) { textBox2.Text = ""; string str = ...
- Apex语言(七)集合
1.集合 集合是可以存储多个记录数的变量类型. List列表集合可以包含任何数量的数据,与数组类似. Set列表集合包含多个无序的唯一记录数,集合不能具有重复记录,与列表类似. Map地图是一个键值对 ...
- Leetcode刷题笔记——查找
33.Search in Rotated Sorted Array 题目描述: 给定一个被翻转的整型升序数组nums,数组中无重复元素,如[4,5,6,7,0,1,2],和一个整数target.要求在 ...
- Android 性能测试初探(五)
书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...
- PAT_A1129#Recommendation System
Source: PAT A1129 Recommendation System (25 分) Description: Recommendation system predicts the prefe ...
- PAT_A1108#Finding Average
Source: PAT A 1108 Finding Average (20 分) Description: The basic task is simple: given N real number ...
- eas之树
如何设置树的深度(即树总共有几级) // 设置树的深度为3,即树包括0.1.2三级结点 table.getTreeColumn().setDepth(3); 如何设置树的方向 树的方向包括两种:自上向 ...
- 洛谷 P1068 分数线划定【排序+模拟】
世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,AA市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150\%150%划 ...
- 关于linux suse11忘记root密码修改方法
SUSE Linux忘记root密码 1.重新启动机器,在出现grub引导界面后,按F2,在启动linux的选项里加上init=/bin/bash,通过给内核传递init=/bin/bash参数使 ...