鱼C论坛

 找回密码
 立即注册
查看: 1816|回复: 7

为何只能打印后半部分

[复制链接]
发表于 2016-7-9 07:10:15 | 显示全部楼层 |阅读模式
10鱼币
#include<stdio.h>
#include<conio.h>
char capital='X'&&'Z';

float num;
int main(){
        scanf("%c%f%c%f",&capital,&num,&capital,&num);

        printf("%c%f%c%f\n",capital,num,capital,num);
getch();
}

这个程序目的是输入两个数X和Z(不按顺序),每个字母后面各一个实数,
然后字母原样打印,实数打印出浮点型
比如输入X30.5Z2按我想法是打印出X30.500000Z2.000000
但打印结果却是两次打印后半段的浮点型Z2.000000Z2.000000
请高手帮忙改下程序,谢谢~

最佳答案

查看完整内容

如果你的意思是需要比较后再输出,加入if语句就可以,希望这次没有理解错,如果还需要改些什么,可以告诉我试试,因为我之前也会不断想“能不能这样?能不能那样呢?”多讨论会帮助记忆,学了c++,差点就忘记了printf()语句了,哈哈!不过请体谅我上班,没有编译器,所以不能调试后再回复 #include #include char capital1='X',capital2 = 'Z', tempCapital; float num1, num2,tempNum; int main(){ scanf("%c%f%c% ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-9 07:10:16 | 显示全部楼层
如果你的意思是需要比较后再输出,加入if语句就可以,希望这次没有理解错,如果还需要改些什么,可以告诉我试试,因为我之前也会不断想“能不能这样?能不能那样呢?”多讨论会帮助记忆,学了c++,差点就忘记了printf()语句了,哈哈!不过请体谅我上班,没有编译器,所以不能调试后再回复
#include<stdio.h>
#include<conio.h>
char capital1='X',capital2 = 'Z', tempCapital;

float num1, num2,tempNum;
int main(){
        scanf("%c%f%c%f",&capital1,&num1,&capital2,&num2);

if(capital1 > capital2 )//字符比较,满足条件就字符交换
{
    tempCapital = capital1;
    capital1 = capital2;
    capital2 = tempCapital;
}

if(num1 < num2)//浮点数比较,满足条件浮点数交换
{
    tempNum = num1;
    num1 = num2;
    num2 = tempNum;
}
        printf("%c%f%c%f\n",capital1,num1,capital2,num2);
getch();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-9 10:26:55 | 显示全部楼层

因为输入第二次值的时候会把前面的值覆盖,所以只会显示后面的值,同一个内存地址只能保存一个值,新的会覆盖旧的,按你的代码也就是,后面的capital覆盖前面的capital,后面的num覆盖前面的num,所以打印出来就只显示后面输入的内容,下面是修改的源码,不是是否让你明白,如果说错了请大神更正,我也是新同学,也想知道自己理解是否正确,加油同学
#include<stdio.h>
#include<conio.h>
char capital1='X',capital2 = 'Z';

float num1, num2;;
int main(){
        scanf("%c%f%c%f",&capital1,&num1,&capital2,&num2);

        printf("%c%f%c%f\n",capital1,num1,capital2,num2);
getch();
}

评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +1 收起 理由
晚起鸟儿 + 1 + 5 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-9 12:26:03 | 显示全部楼层
donkkong 发表于 2016-7-9 10:26
因为输入第二次值的时候会把前面的值覆盖,所以只会显示后面的值,同一个内存地址只能保存一个值,新的会 ...

那我输入Z2X30.5希望把X及后面实数移到前面打印出X30.500000Z2.000000呢?也就是不管怎样输入,把X及X后面的数打印在前面(要具有通用性哦)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-9 13:54:49 | 显示全部楼层
将printf("%c%f%c%f\n",capital1,num1,capital2,num2);更改为printf("%c%f%c%f\n",capital2,num2,capital1,num1);测试一下是不是想要这个效果?

其实我怕理解错你的意思,如果不是你想要的结果,请你再描述一下你想要的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-9 18:00:32 | 显示全部楼层
donkkong 发表于 2016-7-9 13:54
将printf("%c%f%c%f\n",capital1,num1,capital2,num2);更改为printf("%c%f%c%f\n",capital2,num2,capital1, ...

改了后只是将输入的两部分互换输出,我是要不论输入X30.5Z2还是Z2X30.5结果都输出X30.500000Z2.000000
也就是让X及后面的实数放前面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-10 12:22:30 | 显示全部楼层
本帖最后由 晚起鸟儿 于 2016-7-11 14:41 编辑
donkkong 发表于 2016-7-9 07:10
如果你的意思是需要比较后再输出,加入if语句就可以,希望这次没有理解错,如果还需要改些什么,可以告诉我 ...


自己解决了,还是要谢谢您耐心帮助,而且您让我明白了第二次输入的把第一次的覆盖了,以下为正确代码:
#include<stdio.h>
#include<conio.h>
char capital1,capital2;

float num1, num2;
int main(){
  scanf("%c%f%c%f",&capital1,&num1,&capital2,&num2);

if(capital1=='X')
{
  printf("%c%f%c%f\n",capital1,num1,capital2,num2);  
}
else if(capital1=='Z')
{
  printf("%c%f%c%f\n",capital2,num2,capital1,num1);
}
getch();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-12 10:46:50 | 显示全部楼层
晚起鸟儿 发表于 2016-7-10 12:22
自己解决了,还是要谢谢您耐心帮助,而且您让我明白了第二次输入的把第一次的覆盖了,以下为正确代码: ...

不客气,这样输入也是可以得到你所需要的结果的,终点只有一个,实现的过程才是最重要的。加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 04:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表