c语言字符的原理,C语言字符的输入输出原理

例:

#include

int main(void)

{

char ch;

while((ch = getchar()) != '#')

putchar();

return 0;

}

在这个程序中,运行情况如下:

hello,world [Enter]     -->输入"hello,world"后输入Enter键

hello,world               -->自动打印

this is a test![Enter]   -->输入"this is a test!"后输入Enter键

this is a test!             -->自动打印

为什么会是在输入Enter键之后才执行putchar()打印,而不是输入一个字符就打印一个字符(类似与hheelloo,,wwoorrlldd形式)的呢?

这是因为在大多数操作系统上是延迟回显,在这种情况下您所键入的字符被收集并存储在一个缓冲区中,按下回车键后会把缓冲区中所有的

字符一起输出(并把缓冲区清空)。(有的操作系统是立即回显,即没有缓冲区,输入一个字符,显示一个字符)

注意:

许多程序使用getchar()来逐个字符的读取输入。通常,系统使用行缓冲 输入(line-buffered input),这意味着输入的内容在您按下回车

键时被传输给程序。按下回车键的同时还将传输一个编程时需要注意的换行字符。ANSI C把缓冲输入作为标准。

在使用scanf()函数进行输入时:

1. 对于scanf("%d",&input)形式,scanf()函数处理的方式是这样的:

例:假如输入的数据是如下形式:  12c[Enter]       //[Enter是回车键]

输入缓冲区中的所有字符在缓冲区的排列如下:

' '

' '

1

2

c

\n

按下回车键后,scanf()函数开始每次读取一个输入字符,它跳过空白字符(空格,制表符和换行符)直到遇到一个非空白字符。因为他试图读取一个整数,所以scanf()期望发现一个数字                         字符或者一个符号(+或者-).

如果遇到了一个非数字的字符,他就得出结论:已读到了整数的尾部。scanf()把这个非数字字符放回输入缓冲区。这就意味着当程序下一次开始读取输入时,它将从前面被放弃的那个非                           数字字符开始。最后,scanf()计算读取到的数字的相应数值,并将该值放到指定的变量中。

如果第一个非空白字符不是数字,将会发生什么呢?比如说,是A而非一个数字?这时scanf()会停在那里,并把A(或者不管什么)放回输入。没有把任何值赋给指定的变量,程序下一次                           读取输入时,它就在A处重新开始。如果程序中只有%d这个说明符,scanf()永远也不会越过那个A去读下一个。而且,如果您使用带有多个说明符的scanf()语句,ANSI C 要求函数在第一                          个出错的地方停止读入输入。

2.对于scanf("%s",&input)形式,scanf()函数处理的方式是这样的:

如果使用%s说明符,那么空白字符(空格,回车,制表符)以外的所有字符都是可接受的,所以scanf()跳过空白字符直到遇到第一个非空白字符,然后保存再次遇到空白字符之前的所有非空白字符.这就意味着%s是scanf()读取一个单词,也就是说,一个不包含空白字符的字符串。如果使用字段宽度,scanf()在字段的结尾或者第一个空白字符处停止。不能通过字段宽度使得scanf()用一个%s说明符读取多于一个字的输入。最后一点:当scanf()把字符串放在一个指定的数值中,他添加终止的'\0'使得数组内容成为一个C字符串。

3.对于scanf("%c",&input)形式,scanf()函数处理的方式是这样的:

如果使用%c说明符,那么所有的输入字符都是平等的。如果下一个输入字符是一个空格或者换行符,将会把这个空格或者换行符赋给指定的变量;不会跳过空白字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值