




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言学习2字符串及输出和输入2.1:不像我们之前学到的整型,浮点型等数据那样,C没有为字符串定义专门的变量类型,一般情况下将字符串放在字符数组中。下面我们看下段字符串在数组中存放的方式:“hello hi!”hellohi!0需要注意“0”不是真正意义上字符串的一部分,它的作用是告诉电脑字符串在此处结束。但它也占用一个字节。下面我们用程序2.1来验证“0”是否占用空间。/*函 数 名:main输入参数:无输出参数:无调 用:printf(), strlen()被 调 用:无功 能:验证字符串中“0”是否占空间*/#include #include #define PRAISE one name/宏定义一个字符串void main(void) printf(the strlen(s_name) =%dn,strlen(PRAISE); printf(the sizeof(s_name) =%dn,sizeof(PRAISE); 程序2.1程序2.1运行的结果如图2-1所示:图2-1:程序2.3运行结果Strlen()求的是字符串中字符的个数“0”是不属于字符串的一部分的,所以strlen(s_name)=8;sizeof求的是字符串所占数据的大小,“0”也包括在内的,所以sizeof(s_name) =9。也就是说字符串存放在数组中时,会在字符串的末尾加一个“0”来指示字符串的结束。给一个字符型数组赋值如下:Char c_name10 = “ding you wei”;当我们需要知道一段字符串中有多少的字符时可以使用strlen()函数来实现。下面我们来看程序2.2:/*函 数 名:main输入参数:无输出参数:无调 用:printf()被 调 用:无功 能:求取字符串中字符的个数*/#include #include char c_name3 ;float f_richer ;void main(void) #define Q hei is me. char s_name30 =ding you wei; printf(the num of Q is:%dn,strlen(Q); printf(the num of s_name is:%dn,strlen(s_name);程序2.2对于上面的程序我们要注意两点:1,由于strlen()是C库中的函数,所以我们要在文件的开头包含string.h文件。要注意strlen()与sizeof的区别,strlen()是函数,它求的是一个字符串中或字符串数组中字符的个数,例如printf(the num of s_name is:%dn,strlen(we)。而size0f()只是一个关键字,它是用来求某一数据类型所占的字节数的;2.我们可以通过宏定义的方式来定义一段字符串。其实我们还可以有另一个方法来定义一个字符串变量:const char Q_word20 =hei is me.下面我们来具体比较下strlen()和sizeof的区别,看程序2.3:/*函 数 名:main输入参数:无输出参数:无调 用:printf(), strlen()被 调 用:无功 能:比较sizeof()与strlen()的区别*/#include #include char c_name3 ;float f_richer ;void main(void) char s_name20 = ding you wei; printf(the sizeof(s_name)=%dn,sizeof(s_name); printf(the strlen(s_name)=%dn,strlen(s_name);程序2.3程序运行的结果如图2-2所示:图2-2:程序2.3运行结果从程序运行的结果我们可以看出sizeof()求的是数组的大小,因为我们定义的是包含20个字符元素的数组,而一个字符的大小为1个字节,所以该数组的大小为20;strlen()求的是该数组中字符串所包含的字符的个数(包括空格),所以其大小为12.2.2:printf()的使用Printf()的使用格式一般是printf(“”,num1,num2)。双引号里面包括需要原样打印的字符串及对后面参数格式说明的格式符。有些时候我们还需要对格式符进一步的进行规定。表1列出了一些修饰符。修饰符意义标志五种标志(-、+、空格、#、0)digit字段的宽度,如果该字段无法容纳要打印的数或字符串,系统会字段采样更宽的字段.digit精度。对于浮点数来讲是将要打印小数点后面的位数。对于%s来讲是将要打印字符的最大数目。对于整数,是将要打印数字的最小位数。h和整数转换符一起使用,表示一个short int或unsigned short int.例如:%hd、%huhh和整数转换符一起使用,表示一个signed char或unsigned char.例如:%hhd、%hhul和整数转换符一起使用,表示一个long int或unsigned long int.例如:%hd、%luL和浮点转换符一起使用表示long double表1:printf()修饰符五种标志的具体具体作用如表2所示:标志意义-项目左对齐。也就是说将项目打印在字段的左侧开始处。+有符号的数若为正则在数字前加“+”,若为负则加“-”空格有符号数若为正则在数字前加一个空格,若为负则在数字前加“-”#%#o和%#0x会打印出八进制和十六进制的的前缀。对于浮点型数据,即使没有数字,也会打印一个小数点0用前导0代替空格来填充字段宽度。如果0标志与精度说明符同时出现那么0标志被忽略表2:printf()5种标志下面我们具体来看下printf()的工作流程。现有下面语句float n1 =3.0double n2 =3.0long n3 =2000000000long n4 =1234567890Printf(“%ld %ld %ld %ldn”,n1,n2,n3,n4,);首先计算机根据变量n1,n2,n3,n4把这些值放到堆栈中,所以,n1占8个字节(float被转换为double),n2也占8个字节;n3和n4分别占用4个字节。然后,printf()根据转换说明来读取堆栈中的值。%ld说明printf()读取4字节的数据,而第一个数据应该是8个字节,所以printf()只读取了n1数据的一般,这样打印的数据便会出错。、对于一些较长的字符串,我们有三种打印的方法:1:采用多个printf()2:用反斜杠和回车的方式。例如: printf(“anotherway to your home.n”)3.采样字符串连接的方法。例如:printf(“anotherway to ”your home.n”)即在一个双引号引起来的字符串后面跟另一个双引号引起来的字符串,且两者之间这有空白符,那么C会把他们组成一个字符串。2.3:scanf()的使用scanf()使用与printf()相似:scanf(“说明符”,&变量)&变量表示是变量的地址,当然如果变量时数组的话,那么前面就不需要加“&”,因为数组的名字就代表它的首地址。scanf()的转换符与printf()很相似,主要区别是printf()将%e、%f用于double类型,而scanf()将%e、%f用于float型,将%le、%lf用于double型。表3列出scanf()的主要转换说明符。转换说明符意义%c将输入转换成字符%d将输入转换成有符号的十进制整数%e %f将输入转换成浮点数%E %F将输入转换成浮点数%o将输入转换成有符号的八进制整数%s将输入转换成字符串%u将输入转换成无符号的十进制整数%x %X将输入转换成有符号的十六进制整数表3:scanf()转换说明符表4列出了scanf()的转换修饰符修饰符意义*滞后赋值(啥意思?)digit最大字段宽度,在达到最大字段宽度或者遇到第一个空白字符时停止对输入项的读取hh将整数读作signed char或unsigned char.%hhu、%hhdll将整数读作long long或unsigend long long.%hhu、%hhdh、l、或L%hd指示该值将会存储到short int中。%ho、%hx和%hu指示该值将会放到unsigned short中。%ld指示该值将会存储到long中。%lo、%lx和%lu指示该值将会放到unsigned long中。%le、%lf指示该值将会放到double中。L(不是l)与e,f搭配表示放在long double 中。表4:scanf()修饰符下面我们具体来看看scanf()的工作流程:假定你用了一个%d说明符来读取一个整数。Scanf()函数开始每次读取一个输入字符,他跳过空白字符(空格、制表符、换行),知道遇到第一个非空白字符。由于是读入整数,所以scanf()只有读到数字或正负号才行,如果读到的是其他的非空白字符,那么scanf()会停止读取。如果他发现一个数字或正负号,那么将其保存,并继续往下读,直到读到一个非数字的字符或读到指定的字宽。scanf()将遇到的非数字的字符放回输入。这就意味着下次读取时,scanf()会从这个非数字的字符开始读。如果你用了一个%d说明符来读取一个整数,可是Scanf()函数读到的第一个非空白字符却不是数字或正负号,比如是“A”,那么Scanf()将停止读取,并“A”放回输入,下次读取时从“A”处开始。如果程序只有%d说明符,那么Scanf()永远也跳不过“A”(去都下个字符)。其他的说明符跟%d相似,主要区别是%x能识别a、b、c、d、e、f.%f能识别小数点,%s能识别空格以外的所有字符。Scanf()允许把普通字符放在格式字符串中。除了空格字符之外的普通字符要与输入字符串完全匹配。看程序2.4/*函数名:main输入参数:无输出参数:无调用函数:scanf() printf()被调用:无功能:在scanf()的格式字符串中加入普通字符*/#include void main(void) int i_num =0; float f_num = 0.0f; scanf(%d,%f,&i_num,&f_num); printf(i_num=%d f_num=%.1fn,i_num,f_num);程序2.4那么在输入数字是应该按下面的方式:3,1.3 或3, _1.3 或_3,1.3(_表示空格)不能像这样:3 ,1.3原因是scanf()第一个要读的是整数,我们先输入3,满足条件。下一个必须输入逗号,如果你输入的是空格,那么scanf()完成对%d的读取,下一个读取的应该是%f,也就是说只有读到数字、符号或小数点才可以,可是读到的却是逗号,scanf()会因此而停止读取。f_num也就不会被赋值。Printf()和scanf的*修饰符。有些时候我们不想事先规定好打印字符的字宽,而是希望在程序运行过程中来决定打印字符的字宽。那么您可以用*来替代表示字宽的数字,下面我们来看程序2.5:/*函数名:main输入参数:无输出参数:无调用函数:scanf() printf()被调用:无功能:用*来指定打印字符的字宽*/#include void main(void) int i_num =0; /*i_width、i_precision分别用来指示输出字符的字宽及精度*/ int i_width =0; int i_precision =0; float f_num = 0.0; printf(aplease enter a float number:); scanf(%f,&f_num); printf(n); printf(aplease enter two numbers to ensure the width and precision:); scanf(%d %d,&i_width,&i_precision
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 羊绒工序知识培训内容
- 成人吻合管留置操作与注意事项
- 香道课件教学课件
- 电力工程施工进度计划制定措施
- 挖掘机轴套采购合同范本
- 教育培训合同更改协议书
- 2025年度数据中心强电安全防护与施工合同
- 2025版商铺租赁及经营权转让合同范本
- 2025房地产融资合同:新能源产业配套地产合作协议
- 2025年度工伤事故赔偿责任承担细则合同
- 县人民医院(三级乙等)“十五五”规划
- 中学生自残课件
- 拍卖保留价协议
- 医疗纠纷的防范与处理课件
- 2025年度中职学校教师培训工作计划
- 2025年4月自考00107现代管理学试题及答案含评分标准
- 烟气脱硝工艺培训课件
- 2025建筑工程施工标准合同
- 仪表安全培训课件
- 电能质量技术 绪论、第1章 电能质量概述
- 汽车维修工(新能源汽车电控技术)赛项竞赛规程
评论
0/150
提交评论