scanf与printf“孪生”双胞胎

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://mp.csdn.net/mdeditor/103202844
————————————————

#scanf()中\n并不是为了题目所要求而用,也不是为了程序员设计时所使用,因为对象在使用该程序代码时下意识会换行,这时你需要使用getchar();来吸取字符而引发下一轮输入或者输出
getchar可以说是为了对象而产生,而设计的。
而scanf中使用换行,紧接着对象也会下意识换行,而本来对象输入一组东西时恰好第一个输入的是字符,这样会导致后来计算的一组结果前面部分出现错乱。而printf语句中你需要自己输入\n程序本身才会换行,否则它不会换行,所以printf语句不会自动换行,这好比了scanf语句有自动换行的魔力了。所以作为程序员的你可以有两种方式例如……。

#同志们可以看看以下的题目两种不一样的解,希望对你们有帮助。

题目链接
————专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:

2
M 1.75
F 1.8

输出样例:

1.61
1.96

————下面请看代码:

#include<stdio.h>
int main()
{
	int i,n;
	float t[10];// 记录输入人的身高 
	double g;
	char s[10];// 记录输入人的性别 
	scanf("%d\n",&n);
	for(i=0;i<n;i++)
	{
		getchar();
		scanf("%c%f",&s[i],&t[i]);//将输入的人的性别和身高存于预先数组 
	}
	for(i=0;i<n;i++)
	{
		g=0;
		if(s[i]=='M')
		{
			g=t[i]/1.09;//'M'即为男性,得到女性最佳身高 
		}
		else
		{
			g=t[i]*1.09;//对立的:'F'即为女性,得到男性最佳身高  
		}
		printf("%.2lf\n",g); //输出对应身高 
	}
	
	return 0;
}

————再看输入样例运行结果:
Look!!!

如果我将上述的for结构语句中scanf语句改成这样:

scanf("%c %f",&s[i],&t[i]);

再看其运行结果:
错误答案
##以上答案错误,是因为我占位符中%c和%d隔了一个空格,那么存字符的数组会在前面多存了一个\n,以致输出的结果都为 'F’对应的男性最佳身高

————还可以有以下做法:
Look!!!其他程序员做法链接

其scanf于printf主体语句如此:

scanf("\n%c%lf",&c,&h);
        s=0;
        if(c=='M')
        {
            s=h/1.09;
        }
        else
        {
            s=h*1.09;
        }
        printf("%.2lf\n",s);

————————————————
版权声明:本文为CSDN博主「horour」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/horour/article/details/81773541

————还可以这样呢!:
同志们再耐心看完

其scanf与printf主体语句如此:

scanf("%d",&n);
	getchar();
	while(n--){
		scanf("%c%lf",&c,&m);
		if(c == 'F')
			printf("%.2lf\n",m * 1.09);
		else
			printf("%.2lf\n",m / 1.09); 
		getchar();
————————————————
版权声明:本文为CSDN博主「SlienceAccept」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37708702/article/details/89197383
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值