注意:scanf("%c",&ch)格式读字符时,所有字符都是有效输入,如回车符、空格符等,如以下程序不能正常读入第二组输入数据
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
{
if(a>b)
{
temp=a;a=b;b=temp;
}
if(a>c)
{
temp=a;a=c;c=temp;
}
if(b>c)
{
temp=b;b=c;c=temp;
}
printf("%c %c %c\n",a,b,c);
}
原因是第一行输入最后的回车会被下一个scanf语句中的第一个%c读给a;
解决方法如下:
while(scanf(" %c%c%c",&a,&b,&c)!=EOF)
{
......
}
或
while(scanf("%c%c%c ",&a,&b,&c)!=EOF)
{
......
}
或
while(scanf("%c%c%c\n",&a,&b,&c)!=EOF)
{
......
}
在scanf的格式控制串中加入空白符的作用是跳过0个或多个空白符(包括空格、回车或制表符)。
输出1000!的最高位:
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
#include <math.h>
int
main()
{
int
n,i;
double
k=1.0;
scanf
(
"%d"
,&n);
for
(i=1;i<=n;i++)
{k=i*k;
while
(k>=10)
k=k/10;}
printf
(
"%d"
,(
int
)k);
return
0;
}
|
整数幂
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h>
#include <math.h>
int
main()
{
int
n,a,b,s,i;;
scanf
(
"%d"
,&n);
while
(n--)
{
s=1;
scanf
(
"%d%d"
,&a,&b);
for
(i=0;i<b;i++)
s=s*a%1000;
printf
(
"%d\n"
,s);
}
return
0;
}
|