我想知道为什么

wf3966 2008-12-01 11:39:48
问道编程题
题为:从键盘输入10个整数,然后根据提示选择输入‘A’或者‘B’,如果输入‘A’,将这10个数按从小到大的顺序输出,如果输入‘D’,按从大到小的顺序输出
这是我编的,错在哪儿呢,按‘A’输入什么输出什么 ,按‘D’就对了,谁能告诉我错在哪儿,为什么会按‘D’对而按‘A’就错了
#include<stdio.h>
void bubble (int a[]);
void swap(int*x,int*y);
int main (void)
{
int a[10];
int i,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
if(getchar()=='A')
bubble(a);
if(getchar()=='D')
{
bubble(a);
for(i=0,j=9;i<j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}

printf("After sorted,a[10]=\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
return 0;
}
void bubble (int a[])
{
int i,j;
for(i=1;i<10;i++)
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}



void swap(int*x,int*y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
按‘A’是错的,按’D‘就对了
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
riyygydxliming 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 wf3966 的帖子:]
问道编程题
题为:从键盘输入10个整数,然后根据提示选择输入‘A’或者‘B’,如果输入‘A’,将这10个数按从小到大的顺序输出,如果输入‘D’,按从大到小的顺序输出
这是我编的,错在哪儿呢,按‘A’输入什么输出什么 ,按‘D’就对了,谁能告诉我错在哪儿,为什么会按‘D’对而按‘A’就错了
#include <stdio.h>
void bubble (int a[]);
void swap(int*x,int*y);
int main (void)
{
int a[10];
int i,j,t;

[/Quote]


你的代码没有问题

在试一下
nullah 2008-12-01
  • 打赏
  • 举报
回复
UP
cattycat 2008-12-01
  • 打赏
  • 举报
回复
scanf("%d",&a[i]);
scanf之后按回车键,getchar()其实得到的是回车键,不是A或者D。
在scanf后加一个getchar()什么都不做就好了,或者2楼的办法。
wf3966 2008-12-01
  • 打赏
  • 举报
回复
明白了,谢谢各位
wf3966 2008-12-01
  • 打赏
  • 举报
回复
按前几楼的方法改后,按‘A’对了,按‘D’又错了
nwao7890 2008-12-01
  • 打赏
  • 举报
回复
楼上说的对
在If(getchar()=='A')这里实际读入的是你输入数组最后一个元素后的那个回车,把这个地方也换成一个变量SCANF进来,然后比较变量是不是'A'或是'D'就好了
lann64 2008-12-01
  • 打赏
  • 举报
回复
if(getchar()=='A')
bubble(a);
if(getchar()=='D')
-------------
这个地方有问题。读了两次输入。实际上第一次是读了回车,用在了第一条if里,总是false。然后再读一次用作第二次判断,这个时候是'D'的话,执行了排序,其他的都跳过去直接输出了。
Swared 2008-12-01
  • 打赏
  • 举报
回复
我用VC6.0测试。输入 1 2 3 4 5 6 7 8 9 0;无论输入,A D,都是原样输出
toadzw 2008-12-01
  • 打赏
  • 举报
回复
#include <stdio.h>
void bubble (int a[]);
void swap(int*x,int*y);
int main (void)
{
int a[10]={3,0,5,9,7,5,6,3,4,9};
int i,j,t;
/*
for(i=0;i <10;i++)
scanf("%d",&a[i]);
*/
if(getchar()=='A')
bubble(a);
if(getchar()=='D')
{
bubble(a);
for(i=0,j=9;i <j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}

printf("After sorted,a[10]=\n");
for(i=0;i <10;i++)
printf("%3d",a[i]);
return 0;
}
void bubble (int a[])
{
int i,j;
for(i=1;i <10;i++)
for(j=0;j <10-i;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}



void swap(int*x,int*y)
{
int t;
t=*x;
*x=*y;
*y=t;
}


dzc8866 2008-12-01
  • 打赏
  • 举报
回复
UP
帅得不敢出门 2008-12-01
  • 打赏
  • 举报
回复
没有啥大问题 ,我觉得你的问题在于读入的不是D 也不是A 所以直接输出原来的.
你在if(getchar()=='A')
{
printf("put A\n"); //加上这个试试你输入的对不对
bubble(a);
}

#include <stdio.h>
void bubble (int a[]);
void swap(int*x,int*y);
int main (void)
{
int a[10]={3,0,5,9,7,5,6,3,4,9};
int i,j,t;
/*
for(i=0;i <10;i++)
scanf("%d",&a[i]);
*/
if(getchar()=='A')
bubble(a);
if(getchar()=='D')
{
bubble(a);
for(i=0,j=9;i <j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}

printf("After sorted,a[10]=\n");
for(i=0;i <10;i++)
printf("%3d",a[i]);
return 0;
}
void bubble (int a[])
{
int i,j;
for(i=1;i <10;i++)
for(j=0;j <10-i;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}



void swap(int*x,int*y)
{
int t;
t=*x;
*x=*y;
*y=t;
}



A
After sorted,a[10]=
0 3 3 4 5 5 6 7 9 9

Terminated with return code 0
Press any key to continue ...
hhyttppd 2008-12-01
  • 打赏
  • 举报
回复

int main (void)
{
int a[10];
int i,j,t;
int c;
for(i=0;i <10;i++)
scanf("%d",&a[i]);

do{
c = getchar();
}while(c != 'A' && c != 'D'); //第一次读入的是'\n'

if(c =='A')
bubble(a);

if(c =='D')
{
bubble(a);
for(i=0,j=9;i <j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}

printf("After sorted,a[10]=\n");
for(i=0;i <10;i++)
printf("%3d",a[i]);
return 0;
}
coverallwangp 2008-12-01
  • 打赏
  • 举报
回复
我用vc6测试,按‘A’也是对的。

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧