为什么我的C语言写出来运行,敲回车不是执行而是换行呢?
求教,万分感谢!#include<stdio.h>#include<malloc.h>#definenull0#definelensizeof(structlnode)t...
求教,万分感谢!
#include<stdio.h>
#include<malloc.h>
#define null 0
#define len sizeof(struct lnode)
typedef struct lnode {
int data;
struct lnode *next;
}lnode ,*list;//定义两个节点类型,一个是普通的一个是指针的
void makelnode(list &l)//创建一个空的节点
{l=(list)malloc(len);
l->next=null;
}
void createlist(list &l)//创建链表
{ char c;
l=(list)malloc(len);//动态申请空间
l->next=null;
while((c=getchar())!='/n')//当从键盘输入的不是回车键的时候把该字符放到一个节点中,并把节点都连起来
{list p;
p=(list)malloc(len);
p->data=c-'0';//把节点的数据域里存上数字
p->next=l->next;
l->next=p;
}
}
void add(list l1,list l2,list &l3)//实现两个链表的相加,相当于两个链表归并成第三个链表
{list p1,p2,p3;
int sum=0;
int carry=0;//定义进位标志
p1=l1->next;//分别始指针指向第一个节点,准备实现个位的相加
p2=l2->next;
while(p1&&p2)//当两个表的长度相同时,即两个数的个数相同while语句是实现相加并且实现第三个链表的创建
{
p3=(list)malloc(len);
sum=p1->data+p2->data+carry;//每个节点只存了一位数
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p1=p1->next;//指针一移到下一个节点,为一个数的十位或百位做准备
p2=p2->next;
p3->next=l3->next;//将创建的节点连起来
l3->next=p3;
}
while(p1)//当第一个数比第二个数的位数多的时候
{
p3=(list)malloc(len);
sum=p1->data+carry;
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p1=p1->next;
p3->next=l3->next;
l3->next=p3;
}
while(p2)
{
p3=(list)malloc(len);
sum=p2->data+carry;
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p2=p2->next;
p3->next=l3->next;
l3->next=p3;
}
if(carry)//当都加完了,还有进位标志,则在开辟一个空间把它也放到链表中去
{
p3=(list)malloc(len);
p3->data=1;
p3->next=l3->next;
l3->next=p3;
}
}
void out (list l)//定义输出函数
{
list p;
p=l->next;
while(p)
{printf("%d", p->data);
p=p->next;
}
}
void main()
{
list l1,l2,l3;//定义指针变量,是指向结构体的
makelnode(l3);//只为打三个来链表创建头结点
printf("please put a number\n");
createlist(l1);//创建第一个链表
printf("please put another one\n");
createlist(l2);//创建第二个量链表
add(l1,l2,l3);//实现两个链表的相加,并把结果放在第三个链表中去
out(l3);
return;
} 展开
#include<stdio.h>
#include<malloc.h>
#define null 0
#define len sizeof(struct lnode)
typedef struct lnode {
int data;
struct lnode *next;
}lnode ,*list;//定义两个节点类型,一个是普通的一个是指针的
void makelnode(list &l)//创建一个空的节点
{l=(list)malloc(len);
l->next=null;
}
void createlist(list &l)//创建链表
{ char c;
l=(list)malloc(len);//动态申请空间
l->next=null;
while((c=getchar())!='/n')//当从键盘输入的不是回车键的时候把该字符放到一个节点中,并把节点都连起来
{list p;
p=(list)malloc(len);
p->data=c-'0';//把节点的数据域里存上数字
p->next=l->next;
l->next=p;
}
}
void add(list l1,list l2,list &l3)//实现两个链表的相加,相当于两个链表归并成第三个链表
{list p1,p2,p3;
int sum=0;
int carry=0;//定义进位标志
p1=l1->next;//分别始指针指向第一个节点,准备实现个位的相加
p2=l2->next;
while(p1&&p2)//当两个表的长度相同时,即两个数的个数相同while语句是实现相加并且实现第三个链表的创建
{
p3=(list)malloc(len);
sum=p1->data+p2->data+carry;//每个节点只存了一位数
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p1=p1->next;//指针一移到下一个节点,为一个数的十位或百位做准备
p2=p2->next;
p3->next=l3->next;//将创建的节点连起来
l3->next=p3;
}
while(p1)//当第一个数比第二个数的位数多的时候
{
p3=(list)malloc(len);
sum=p1->data+carry;
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p1=p1->next;
p3->next=l3->next;
l3->next=p3;
}
while(p2)
{
p3=(list)malloc(len);
sum=p2->data+carry;
if(sum>=10)
{p3->data=sum-10;
carry=1;
}
else if(sum>=0&&sum<10)
{p3->data=sum;
carry=0;
}
p2=p2->next;
p3->next=l3->next;
l3->next=p3;
}
if(carry)//当都加完了,还有进位标志,则在开辟一个空间把它也放到链表中去
{
p3=(list)malloc(len);
p3->data=1;
p3->next=l3->next;
l3->next=p3;
}
}
void out (list l)//定义输出函数
{
list p;
p=l->next;
while(p)
{printf("%d", p->data);
p=p->next;
}
}
void main()
{
list l1,l2,l3;//定义指针变量,是指向结构体的
makelnode(l3);//只为打三个来链表创建头结点
printf("please put a number\n");
createlist(l1);//创建第一个链表
printf("please put another one\n");
createlist(l2);//创建第二个量链表
add(l1,l2,l3);//实现两个链表的相加,并把结果放在第三个链表中去
out(l3);
return;
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询