求助!这个程无法运行?好像有死循环……

abckangaroo 2009-05-11 09:02:55
#include <stdio.h>
#include <string.h>
void sortarray (int s[],int n);
void sortdelete (int s[],int n);

int main ()
{
int s[50],i=0,n;
char c;
while ((c=getchar())!='\n'){
scanf ("%d",&s[i++]);
}
c=0;//重新初始化
while ((c=getchar())!='\n'){//
scanf ("%d",&s[i++]);
}
n=strlen(s)-1;//
sortarray (s,n);
sortdelete (s,n);
printf ("%d",s);
return 0;
}

void sortarray (int s[],int n)
{
int a,b=0,i,index=0,tmp;
for (a=0;i<n;i++){
index=a;
for (b=a;b<=n;b++){
if (s[b]>s[index])
b=index;
}
if (index!=a){
tmp=s[a];
s[a]=s[index];
s[index]=tmp;
}
}
}




void sortdelete (int s[],int n)
{
int i,j;
for (i=0;i<n;i++){
if (s[i]==s[i++]){
for (j=i;j<n;j++){
s[j]=s[j+1];
n--;
}
}
}
}
...全文
237 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
abckangaroo 2009-05-11
  • 打赏
  • 举报
回复
修改了一下,现在可以运行了,但是结果不对啊……

#include <stdio.h>
#include <string.h>
void sortarray (int s[],int n);
void sortdelete (int s[],int n);

int main ()
{
int s[50],i=0,n,a,b;
char c,d;
for (a=0;a<20;a++){
scanf ("%d%c",&s[i++],&d);
if (d=='\n')
break;
}
for (b=0;b<20;b++){
scanf ("%d%c",&s[i++],&d);
if (d=='\n')
break;
}
n=strlen(s)-1;//
sortarray (s,n);
sortdelete (s,n);
printf ("%d",s);
return 0;
}

void sortarray (int s[],int n)
{
int a,b=0,index=0,tmp;
for (a=0;a<n;a++){
index=a;
for (b=a;b<=n;b++){
if (s[b]>s[index])
index=b;
}
if (index!=a){
tmp=s[a];
s[a]=s[index];
s[index]=tmp;
}
}
}




void sortdelete (int s[],int n)
{
int i,j;
for (i=0;i<n;i++){
while (s[i]==s[i++]){
for (j=i;j<n;j++){
s[j+1]=s[j+2];
}
n--;
}
}
}
goodname 2009-05-11
  • 打赏
  • 举报
回复
你的程序大致流程都是对的,只是细节多处写的不对.
abckangaroo 2009-05-11
  • 打赏
  • 举报
回复
【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集“异或”)。

【输入形式】
首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入第二组整数,以一个空格分隔,行末有回车换行。

【输出形式】
按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。
goodname 2009-05-11
  • 打赏
  • 举报
回复
void sortarray (int s[],int n)
{
int a,b=0,i,index=0,tmp;
for (a=0;i <n;i++){ //<--------这里i没有初始化

printf ("%d",s); //<----这里得需要根据元素个数循环打印
lingyin55 2009-05-11
  • 打赏
  • 举报
回复
程序是用来排序的吗?

while ((c=getchar())!='\n'){ ///这里为什么要用两个while?
scanf ("%d",&s[i++]);
}
c=0;//重新初始化
while ((c=getchar())!='\n'){//
scanf ("%d",&s[i++]);
}
n=strlen(s)-1;////计算数组的长度一般用sizeof而不用strlen
goodname 2009-05-11
  • 打赏
  • 举报
回复
这个可以成为改错题了,似乎有问题的地方比较的多。
liliangbao 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lingyin55 的回复:]
while ((c=getchar())!='\n'){ ///每次输入的值都被c取到了,scanf没有执行到
scanf ("%d",&s[i++]);
}
[/Quote]
up
lingyin55 2009-05-11
  • 打赏
  • 举报
回复
while ((c=getchar())!='\n'){ ///每次输入的值都被c取到了,scanf没有执行到
scanf ("%d",&s[i++]);
}
lingyin55 2009-05-11
  • 打赏
  • 举报
回复
-_-|||看错了,

[Quote=引用 1 楼 lingyin55 的回复:]
while ((c=getchar())!='\n'){

循环的都错了,while ((c=getchar())!=='\n'){
[/Quote]
lingyin55 2009-05-11
  • 打赏
  • 举报
回复
while ((c=getchar())!='\n'){

循环的都错了,while ((c=getchar())!=='\n'){

69,371

社区成员

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

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