格式化输入与输出

在c语言的学习中,永远少不了两个函数,那就是scanf 和 printf 函数。

scanf 其功能是按指定的格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束。

其格式为:scanf(“格式控制串”,地址表)         scanf(“%d”,&num);

地址表:就是变量的地址,常用取地址运算符&。

scanf是一个行缓冲格式输入函数,当我们遇到这样的情况,

int num;

char ch;

printf("please input  a number:\n");

scanf("%d",&num);

printf("please input a char:\n");

scanf("%c",&ch);

当我们打印运行这个程序时,当我们输入一个整型数字并按回车时,第二个scanf并不会让我们输入就会直接打印,因为scanf是一个行缓冲函数,当我们输入第一个时,在其缓冲区存下了数字num,以及'\n'这个字符,所以当程序执行到第二个scanf函数时就会直接将‘\n’应用,不会让用户从键盘输入,然后直接打印。

其实这个就是输入函数所留下的缓存垃圾,我们可以在两个scanf函数之间加上一个getchar()清除,或者用格式串中空格或%*c来“吃掉”。当然对于字符和字符串我们也可以用getchar和gets这样的输入函数。

printf 其功能就是按指定格式向显示器输出数据。

其格式为:printf("格式控制串”,输出表);           printf("%d\n",num);

printf也是一个行缓冲函数,且与scanf共用一个缓存区。

int main()

{

    printf("hello world!");

    while(1)

    return 0;

}

当我们运行这个程序时会陷入死循环,但是程序并不会打印hello world!,这是由于printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中。

(1)缓冲区填满

(2)写入的字符中有“\n”, "\r"

(3)调用fflush手动刷新缓冲区

(4)调用scanf要从缓冲区中读取数据时,也会将缓冲区的数据刷新

满足上面4个条件之一缓冲区就会刷新,也就是printf会真正调用write来写入。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值