晚起鸟儿 发表于 2016-7-9 07:10:15

为何只能打印后半部分

#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
请高手帮忙改下程序,谢谢~

donkkong 发表于 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();
}

donkkong 发表于 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();
}

晚起鸟儿 发表于 2016-7-9 12:26:03

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

那我输入Z2X30.5希望把X及后面实数移到前面打印出X30.500000Z2.000000呢?也就是不管怎样输入,把X及X后面的数打印在前面(要具有通用性哦)

donkkong 发表于 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);测试一下是不是想要这个效果?

其实我怕理解错你的意思,如果不是你想要的结果,请你再描述一下你想要的结果。

晚起鸟儿 发表于 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及后面的实数放前面

晚起鸟儿 发表于 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();
}

donkkong 发表于 2016-7-12 10:46:50

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

不客气,这样输入也是可以得到你所需要的结果的,终点只有一个,实现的过程才是最重要的。加油!
页: [1]
查看完整版本: 为何只能打印后半部分