事实上,有不少输入类的冷用法,在一般使用时并不会常见。为了代码的可读性,通常程序员会选择优化。可是无奈这些冷用法还活跃在一些考试之中坑害考生今天我们就来总结一下。
scanf 格式化输入
scanf(" % 标记 最大宽度 大小 转换码 ");
1.取地址
-
就算是经验丰富的编程者们,有时也会出现把 “& ” 漏掉的这种低级错误。
int a;
scanf("%d",&a);
scanf("%d",a);
要命的是,有时候这种错误并不会被一些编译器发现(比如说Dev C++),它不报错的运行,然后再出错。 -
不过,要是数组的话,直接输入数组名就可以了。
int a[10];
scanf("%d",&a);
这种情况默认为数组的首地址(a[0]) 。
- 当然,要是想给 a[1] 赋值,只需要让上例的 a 改成 a+1 就行了。
2. %之后的
-
数字
int a;
scanf("%2d",&a);
printf("%d",a);
像这样在 % 后加上2,意思就是取两个数字,如:
input :12345
output 12
-
“*”
scanf("%d % * d %d",&a ,&b);
这种情况里的 *,就可以跳过该输入字段。
input : 123 456 789
就会把123赋给a,789赋给b,而跳过456(似乎并没有什么*用)。
3.%d 和 %d 之间的
scanf("%d?%d",&a ,&b);
为什么在两个输入之间会有一“?”呢,这不重要。
在我会这个以前,如果我在输入间隔要添加字符的话,我会写三行 :
scanf("%d",&a);
printf("?");
scanf("%d",&b);
而现在,我只需要一行就能代替三行。
scanf("%d?%d",&a ,&b);
input :1?2
就相当于 a=1,b=2;(这个倒是有点用)
例题
基本就是这样了,下面我们用几道题练习一下。
# include<stdio.h>
int main()
{
char a,b,c,d;
scanf("%c%c",&a,&b);
c=getchar();
d=getchar();
printf("%c %c %c %c",a,b,c,d);
return 0;
}
输入:12 回车
输入:34 回车
问:输出什么?
#include<stdio.h>
int main()
{
char s[80];
int c,i;
scanf("%c",&c);
scanf("%d",&i);
scanf("%s",s);
printf("%c,%d,%s",c,i,s);
return 0;
}
输入123 <空格> 456<空格> 789
问:输出?
这两道例题就比较简单了,何不写写试试?
直接拉去编译器多无聊,对吧。
答案:
- 1 2
3
1,23,456
网友评论