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

  C语言没有字符串类型,而是把它存储在char数组中,字符串以空字符'\0'结束,非打印字符,其ASCII码值为0.双引号对""并不包含在字符串中,它仅告知编译器这是个字符串,另外由编译器负责插入空字符\0. scanf()开始读取后,会在遇到第一个空白字符空格、制表符或换行符处停止读取,C使用其他读取输入函数如gets()来处理一般字符串。 另外"x"和'x'不同。 另外sizeof,是否使用圆括号取决于是否想获取一个类型的大小还是某个具体量的大小,圆括号对于类型是必须的,如sizeof(float),而对于具体量是可选的,如sizeof 6.28,当然都带着比较好。 strlen()不计算\0,而sizeof()则计算空字符\0。 当编译程序时,#define定义的常量值会在常量名出现的每个地方替代它,当运行程序时,所有的替代都已经完成了。 #define PI 3.1415926
  请注意:符号名后的所有内容都被用来代替它,不要犯这样的错误:#define TOES = 20,这样TOES会被=20所替代。
  C90新增了const关键字:const int MONTHS = 12;
  在系统中也定义了明显常量,C头文件limits.h和float.h分别提供有关整数类型和浮点类型的大小限制的详细信息,每个文件
  都定义了一系列应用于实现的明显常量。
  
  float.h
  
  
  因为printf()使用%来标识转换说明符,所以打印%时,使用2个%符号,如上。
  可以在%和定义转换字符之间通过插入修饰符对基本的转换说明加以修改,表中有些是C99新增的,而且如果使用了一个以上的修饰符,则应该与下表中出现的顺序相同,并不是所有的组合都是可能的。
  
  
  
  
  赋初值时采用"截尾法",而打印时,则采用"四舍五入法"
  P83的例子非常好!!!!!!!!!!!!!!!!!如果0标志和精度说明符比如%5.3f同时出现,则0标志就会被忽略!!
  float值在被用于表达式或参数之前会被自动转换成double型,带小数点型常量都是double型。
  P84页转换说明的意思非常好!!!当传递参数时,传递给printf()的参数按照参数变量类型(float转换成double)被存储在栈中,而打印时,printf()却按照转换说明符从栈中读取。
  printf()函数的返回值是返回所打印的字符的数目,如果输出错误,那么printf()会返回一个负数。注意,计数针对所有的打印字符,包括空格和不可见的换行字符。
  打印超长字符串的方法:(1)、多个printf()语句;(2)反斜线符号和回车键组合方式;(3)字符串连接方式,多个""的字符串,两者之间禁用空白字符分隔 从键盘上输入的是文本字符,scanf()的作用就是:把这些文本字符转换成相应形式,使用规则: 如果使用scanf()来读取一个字符串到一个字符数组中,不要在字符数组名前加&
  如果使用scanf()来读取其他基本变量类型的值,则请在变量名之前加一个&
  scanf()函数使用空格(换行、制表符和空格)来决定怎样把输入分成几个字段,依次把转换说明与字段相匹配,并跳过它们之间的空格(唯一的例外就是%c,即使下一个字符是空白字符,它也会读取那个字符)。 scan()与printf()转换说明符几乎完全相同,主要区别在于:printf()把%f、%e、%E、%g和%G同时用于float类型和double类型,而scanf()只把它们用于float类型,而用于double类型时,需加上"l"修饰符,转换说明符如下图所示:
  
  
  P90页从scanf()角度看输入不错,细看看:当读到与转换说明符不符的字符时,scanf()把该字符放回输入流,而且scanf()会跳过开头的空白字符。scanf()的%s只能读取不包含空白字符的单词,其他常用的getchar()和gets()可用于读取一个字符或一个可包含空格的字符串。
  scanf()函数允许您把普通字符放在格式字符串中。除了空格字符之外的普通字符一定要与输入字符串准确匹配,如: scanf("%d, %d", &n, &m);
  在输入时必须输入以下格式:88,121,注意:逗号必须像scanf()中那样紧跟在88之后,不过因为scanf()会跳过整数前面的空白字符,所以在输入时可在逗号后面键入一个空格或换行符,格式字符串中的空格意味着跳过下一个输入项之前的任何空格(包括"没有空格"的特殊情况")。对于%c注意:(1)scanf("%c",&ch);读取在输入中遇到的第一个字符,而(2)scanf(" %c", &ch)则会读取遇到的第一个非空白字符,因为scanf()会因为(2)中%c之前的空格而跳过空白字符。
  scanf()函数返回成功读入的项目个数,如果没有读取任何项目则返回0. 当它检测到"文件结尾"时,它返回EOF。 printf()的*修饰符:printf("Weight = %*.*f\n",width, precision, weight);依次*、*、f对应width, precision, weight
  scanf()的*修饰符:当把它放在%和说明符字母之间时,它使函数跳过相应的输入项目。scanf("%*d %*d %d", &n);这样输入三个数时,会跳过前面两个不读取,只读取第三个值并赋给变量n。
  在两个转换说明之间放一个空白字符,可以确保即使一个数字溢出了自己的字段,它也不会闯入下一个数字一起输出,这因为控制字符串中的常规字符(包括空格)会被打印出来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值