printf和scanf注意⚠️

首先说scanf

函数原型:

​int scanf( const char *restrict format, ... );​     

关于*:忽略匹配的输入

int a;
scanf("%*s%d",&a);
//我若输入haha 123只会对a赋值,忽略前面的字符串

关于空格(格式字符串中的)

int a,b;
char c;
scanf("%d%d",&a,&b);   
scanf("% %d",&a,&b);
scanf("%d.  %d",&a,&b);
//这三种无区别
scanf("%d%c",&a,&c);
scanf("%d %c,&a,&c);
//读字符时会读空格,所以第一种c是个空格
//同样,%d%c之间无论有多少空格,效果相同
//输入的数字与字符间无论有多少空格,第二种输入都是一样的
scanf("%c %c",&c,&d);
//这样能读俩字符而且字符可以且必须有间隔

关于各种符号

特殊:
'\和%':
int a,b;
char c;
scanf("%d\\%d",&a,&b);
scanf("%d\%d",&a,&b);
//第一种若输入1\1 a,b就都是1
//第二种就不行了
scanf("%d%%%c",&a,&c);
scanf("%d%%c",&a,&c);
//同上
//其他的例如逗号句号啥的只需要打一个
//这样就是强制输入格式

限制长度

int a;
char str[100];
scanf("%5d",&a);
//这样只能读入5个数字
scanf("%5s",str);
//五位字符串

正则表达式

首先这个是针对字符串的.
基本的形式:%*(可省)(数字)[^(可省)restrict] restrict可以
是单个或多个数字字母符号,或是范围0-9.a-z.A-Z
char str[100];
int a,b;
scanf("%[0-9]",str);    //读到不是数字的为止
scanf("%[^a-z]",str);   //读到不是在a-z之外的为止,反过来就是读到a-z为止
scanf("%[0-9a-zA-Z]",str); //只读数字与字母,读到不是这个范围的为止
scanf("%*[(] %d %*[,] %d %*[)]",&a,&b); //忽略(,)和下面的等价
scanf("(%d,%d)",&a,&b);   //(1,2)=>a=1 b=2
scanf("%*[a-zA-Z]%d",&a); //忽略前面的字母
scanf("%10[a-z]",str);    //读10个符合的,但要保证10个是连续的因为遇到不合法的就停了
scanf("%*[^@]%*[@]%[^.]%*[\n]",str);  //实例:提取邮件商 1742939730@qq.com=>qq
//灵活运用这个可以为输入省掉好多麻烦!

返回值

直接复制c参考手册里的:

成功赋值的接收参数的数量(可以为零,在首个接收用参数赋值前匹配失败的情况下),或者
若输入在首个接收用参数赋值前发生失败,则为EOF(EOF=-1)
根据返回EOF这个特性在做题时经常这样:
while(scanf("%d",&n)!=EOF){
    //code
}
这样就处理到文件结束

关于printf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值