为什么这两个会不一样呀??

lllena 2010-09-27 11:50:00
#define Maxsize 100
#include <stdio.h>
#include <stdlib.h>

struct sqlist
{
int dat[Maxsize];
int size;
};


void merge_sqlist(sqlist la, sqlist lb, sqlist *lc )
{
int i=0,j=0,k=0;

while((i<la.size)&&(j<lb.size))
{
if(la.dat[i]<=lb.dat[j])
{
lc->dat[k]=la.dat[i];
lc->size++;
i++;
k++;

if(la.dat[i-1]==lb.dat[j])
j++;
}

else
{
lc->dat[k]=lb.dat[j];
lc->size++;
j++;
k++;
}
}

while(i<la.size)
{
lc->dat[k]=la.dat[i];
lc->size++;
i++;
k++;
}

while(j<lb.size)
{
lc->dat[k]=lb.dat[j];
lc->size++;
j++;
k++;
}
}

void printlist(struct sqlist *l)
{
int i;
for (i=0;i<l->size;i++)
printf("%-4d",l->dat[i]);
printf("\n");
}

void main()
{
struct sqlist lista,listb,listc;
int i=0;
char c;

lista.size=listb.size=listc.size=0;

printf("请输入第一个升序数组,以回车结束\n");
while(1)
{
scanf("%d",&lista.dat[i]);
lista.size++;

scanf("%c",&c);
if(c=='\n')
break;
i++;
}

printf("请输入第二个升序数组,以回车结束\n");
i=0;
while(1)
{
scanf("%d",&listb.dat[i]);
listb.size++;

scanf("%c",&c);
if(c=='\n')
break;
i++;
}
printf("合并后的数组为:\n");

merge_sqlist(lista,listb,&listc);

printlist(&listc);
}



下面用C++::::
#define Maxsize 50
#include <iostream>
#include <iomanip>
using namespace std;

struct sqlist {
int dat[Maxsize];
int size;
};


void merge_sqlist(sqlist la, sqlist lb, sqlist *lc ) {
int i=0,j=0,k=0;

while((i<la.size)&&(j<lb.size)) {
if(la.dat[i]<=lb.dat[j]) {
lc->dat[k]=la.dat[i];
lc->size++;
i++;
k++;

if(la.dat[i-1]==lb.dat[j])
j++;
}

else {
lc->dat[k]=lb.dat[j];
lc->size++;
j++;
k++;
}
}

while(i<la.size) {
lc->dat[k]=la.dat[i];
lc->size++;
i++;
k++;
}

while(j<lb.size) {
lc->dat[k]=lb.dat[j];
lc->size++;
j++;
k++;
}
}

void printlist(struct sqlist *l) {
int i;
for (i=0;i<l->size;i++)
cout<<setw(4)<<l->dat[i];
cout<<endl;
}

void main() {
struct sqlist lista,listb,listc;
int i=0;
char c;

lista.size=listb.size=listc.size=0;

cout<<"请输入第一个升序数组,以回车结束:"<<endl;
while(1) {
cin>>lista.dat[i];
lista.size++;

cin>>c;
if(c=='\n')
break;
i++;
}

cout<<"请输入第二个升序数组,以回车结束:"<<endl;
i=0;
while(1) {
cin>>listb.dat[i];
listb.size++;

cin>>c;
if(c=='\n')
break;
i++;
}
cout<<"合并后的数组为:"<<endl;

merge_sqlist(lista,listb,&listc);

printlist(&listc);
}
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2010-09-28
  • 打赏
  • 举报
回复
在C程序中以下这行
void merge_sqlist(sqlist la, sqlist lb, sqlist *lc )
要改为
void merge_sqlist(struct sqlist la, struct sqlist lb, struct sqlist *lc )
赵4老师 2010-09-28
  • 打赏
  • 举报
回复
摒弃cin、cout
使用scanf、printf
shangyangi 2010-09-28
  • 打赏
  • 举报
回复
接分的!
luciferisnotsatan 2010-09-28
  • 打赏
  • 举报
回复
代码来找茬吗?
lz好歹把要问的问题描述清楚呀。
tzcherish 2010-09-28
  • 打赏
  • 举报
回复
代码好长,格式没有调好。。
同意#三楼,不然很少人这么有耐心看下去。。
zff869030831 2010-09-28
  • 打赏
  • 举报
回复
这两个好像没什么不同,只是输入输出用了不同的东西而已!
十八道胡同 2010-09-28
  • 打赏
  • 举报
回复
先格式化下代码
然后贴代码在
这里
xuehaipp68 2010-09-28
  • 打赏
  • 举报
回复
头晕。。。LZ能把结果展示一下么。。。。
_捕风捉影_ 2010-09-28
  • 打赏
  • 举报
回复
太长了。。。问题要简短扼要,提出哪里不同处的代码就好了
yaoyuan2 2010-09-28
  • 打赏
  • 举报
回复
这个代码太长................
简单叙述。
dooX8086 2010-09-28
  • 打赏
  • 举报
回复
不知道你所说的不一样,是什么不一样。
在C++中输入的这一段,是会死循环的。cin >> 是会跳过空白字符,所以 cin>>c 是永远也读取不到'\n'回车符。

while(1)
{
cin>>lista.dat[i];
lista.size++;
cin>>c; //这里是读不到'\n'的。。可以改成 c = cin.get() 或 cin.get(c);

if(c=='\n')
break;
i++;
}
ForestDB 2010-09-27
  • 打赏
  • 举报
回复
看着挺晕乎的。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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