0%

C语言 基本输入和输出操作

基本输入和输出操作

与大多数现代编程语言一样,C语言也没有输入输出的能力,所有这类操作都由标准库中的函数提供。

stderr流只是将来自C库的错误信息传送出去,也可以将自己的错误信息传送给stderr

stderrstdout之间的主要差别是,输出到stdout的流在内存上缓存,所以写入stdout的数据不会马上送到设备上,而stderr不缓存,所以写入到stderr的数据会立刻传送到设备上。
对于缓存的流,程序会在内存中传入或传出缓存区域的数据,在物理设备上传入或传出数据可以异步进行。这使输入输出比较高效,而为错误信息使用不缓存的流,其优点是可以确保错误信息显示出来,但输出操作是低效的。缓存的流比较高效,但是如果程序因某种原因失败,缓存的流就不会刷新,所以输出可能永远不会显示出来。

scanf会忽略空白字符

scanfprintf中有个格式控制符%n:表示输出有效字符的数量。

N多的scanf参数也可以保证,你可以用许多方式得到自己希望得到的数据。

但是有一点需要注意,就是scanf对输入格式很挑剔,稍微错一点就会导致整个读取输入出错。

scanf的格式控制符%s只能读取不含空格的字符串,但是%[]可以读取包含空格的字符串,比如I love you,就可以全部读取。

scanf的陷阱

  • 变元必须是指针,最常犯的错误是将变量指定为scanf的变元时,忘记在变量名的前面加上&符号,不过使用printf时不需要这个&字符,此外,如果变元时数组名或指针变量,也不需要&符号;
  • 在读字符串时,要确保有足够的空间存放读入的字符串,这个字符串需包含终止字符’\0’,否则,会覆盖内存中的饿数据,甚至是程序代码。

对于字符串输入,使用gets或fgets通常是首选方式,除非要控制字符串的内容。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道