展开全部
1、除了%c的输入而言:scanf输入:abc[回车]后,遇到回车结束,但是回车还留在输入流中。下一个scanf在输入前碰到回车,会自动把回车抛弃,然后再输入:efg,再碰到回车结束。所以加了getchar()时,它会吃掉一个回车。如果不加,在输入前,它会自动删除这个回车,所以结果是一样的。重点是:空格、回车、跳格等结束符在输入前碰到的话,会自动抛弃,输入后碰到的话,就会认为结束。
2、针对%c的输入而言:%c遇到空格、回车、跳格等结束符都是会读取的。
例如:scanf("%c",&i);
scanf("%c",&j);
输入a[回车]b的话,就会是:i = a; j = 回车;
但如果是:scanf("%c",&i);
getchar();
scanf("%c",&j);
输入a[回车]b,会是:i = a; j = b;
所以一般用getchar()吃回车,都是用在%c 后面。
3、应用:输入一个大写字母,输出对应的小写字母。输入数据的第一行为一个正整数T, 表示测试数据的组数。然后是T组测试数据。每组测试数据包含一个大写字母C。
对于每组测试数据, 输出它的小写字母。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main()
{
int i,t;
scanf("%d",&t);
getchar();
char a;
for(i=0;i<t;i++)
{
scanf("%c",&a);
getchar();
printf("%c\n",a+32);
}
return 0;
}
如果scanf("%d",&t);后不加getcahr();输入:2 [回车],则 t = 2; a = 回车
如果scanf("%c",&a);后不加getcahr(),输入:2 [回车] A [回车] B ,则 t = 2; a = A ,下一个循环 ,a = 回车,而不是 B。
2、针对%c的输入而言:%c遇到空格、回车、跳格等结束符都是会读取的。
例如:scanf("%c",&i);
scanf("%c",&j);
输入a[回车]b的话,就会是:i = a; j = 回车;
但如果是:scanf("%c",&i);
getchar();
scanf("%c",&j);
输入a[回车]b,会是:i = a; j = b;
所以一般用getchar()吃回车,都是用在%c 后面。
3、应用:输入一个大写字母,输出对应的小写字母。输入数据的第一行为一个正整数T, 表示测试数据的组数。然后是T组测试数据。每组测试数据包含一个大写字母C。
对于每组测试数据, 输出它的小写字母。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main()
{
int i,t;
scanf("%d",&t);
getchar();
char a;
for(i=0;i<t;i++)
{
scanf("%c",&a);
getchar();
printf("%c\n",a+32);
}
return 0;
}
如果scanf("%d",&t);后不加getcahr();输入:2 [回车],则 t = 2; a = 回车
如果scanf("%c",&a);后不加getcahr(),输入:2 [回车] A [回车] B ,则 t = 2; a = A ,下一个循环 ,a = 回车,而不是 B。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询