C语言 scanf 总结

问题:
对于我这种C语言菜鸟程序员来说,一碰到输入第一想到的就是scanf,正是因为这样在scanf里吃了很多亏。好吧,这里帮自己总结一下:

函数原型:
1
int scanf ( const char *format, ... );
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);
函数 scanf() 是从 标准输入流 stdio 中读内容的通用 子程序,可以读入全部固有类型的数据并自动转换成机内形式。


1.问题一 本意是想输入两个字符,然后显示出来,结果输入G,然后回车,再想输入下一个字符时,程序运行结束。
#include <stdio.h> 
int main() 
    char ch1, ch2; 
    scanf("%c", &ch1); 
    scanf("%c", &ch2); 
    printf("%d %d\n", ch1, ch2); 
    return 0; 
}
结果可以看到ch1吸收了G,ch2吸收了回车。
changjin.tong@sajs151-Veriton-M288:~$ ./scanf             
G
G,

changjin.tong@sajs151-Veriton-M288:~$ 


2.问题二  把格式化从%c改为%s,结果就不一样了。
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
         char ch1[10],ch2[10];
         scanf("%s",ch1);
         scanf("%s",ch2);
         printf("%s,%s\n",ch1,ch2);
         return 0;
 }
结果:
changjin.tong@sajs151-Veriton-M288:~$ ./scanf             
GG
MM
GG,MM
changjin.tong@sajs151-Veriton-M288:~$ 

总结:
1.程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区。
2.接收字符时,回车也会被送到输入缓冲区,被获取缓冲区字符的函数取走。
3.接收字符串时空格,与回车都是\0。

很牛的做法:scanf("%[^\n]",ch);加入正则表达式,这样就方便了很多想用回车来区分不同输入的程序员了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值