| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 306 人关注过本帖
标题:qiu关于未知数据量的输入如何结束的问题
只看楼主 加入收藏
落雨and无声
Rank: 2
等 级:论坛游民
帖 子:48
专家分:30
注 册:2012-10-5
结帖率:88.89%
收藏
 问题点数:0 回复次数:0 
qiu关于未知数据量的输入如何结束的问题
情况很简单,原题是用单链表做一个多项式相加减的程序,问题不在于多项式加减的算法,而是在于数据的录入,我想用scanf进行数据的输入,但是不知道该如何结束,试过特殊数据,EOF等方式,都没能保证程序的正常录入。希望大神指点啊。。。我最近一直纠结于信息的如何输入的问题。。。附加用c语言写的程序代码如下:
程序代码:
#include"stdio.h"
#include"malloc.h" 
#include"stdlib.h"
typedef struct node//定义数据类型
    {
        int p;//系数 
        int e;//指数 
        struct  node*next; 
        }Polynomial,*P_Polynomial; 
P_Polynomial do_malloc(void)//分配并判断是否分配成功
{
    P_Polynomial t;
    if(!(t=(P_Polynomial)malloc(sizeof(P_Polynomial))))
         {
             printf("内存不足!\n");
            exit(1);
         } 
    return t;
}
void Add_Polynomial(P_Polynomial i1,P_Polynomial i2)//加法函数
{ 

 P_Polynomial Pre1,Pre2;

 Pre1=i1;

 Pre2=i2;

 while (i1&&i2) 

 {
     if(i1->e==i2->e) 
     {
          i1->p=i1->p+i2->p;
         if(i1->p==0)
         {
         Pre1->next=i1->next;
         free (i1);
          i1=Pre1->next;
          i2=i2->next; 
         free(Pre2);
         } 
         else
         {
         Pre1=i1;
         Pre2=i2;
         i1=i1->next;
         i2=i2->next;
         free(Pre2);
         } 
     } 
     if(i1->e<i2->e)
     {
     Pre1=i1;
     i1=i1->next;
     } 
     else
     {
         P_Polynomial t;
         t=do_malloc();
         t->p=i2->p;
         t->e=i2->e;
         t->next=i1;
         Pre1->next=t;
         Pre1=Pre1->next;
         Pre2=i2;
         i2=i2->next;
         free(Pre2);
     } 

 } 

 while(i2)

 {
     P_Polynomial t;
     t=do_malloc();
     t->p=i2->p;
     t->e=i2->e;
     t->next=NULL;
     Pre1->next=t;
     Pre1=Pre1->next;
     Pre2=i2;
     i2=i2->next;
     free(Pre2);

 } 
}
void do_print(P_Polynomial p1)
{
    while(p1)
    {
       printf("%d*x^%d",p1->p,p1->e);
       p1=p1->next;
    }
    printf("\n");
} 
void main()
{   
    int chose;
    printf("请选择运算类型,1=加法,2=减法\n");
    scanf("%d",&chose);
    P_Polynomial head1,data1,head2,data2,temp;//用temp指针来记录data的前一个数据,辅助完成输入
    head1=do_malloc();
    head2=do_malloc();
    data1=head1;
    data2=head2;                             //用data访问数据,head作为头指针
    printf("请分别输入两个需要运算的一元多项式,每个多项式以EOF结束\n");
    while(EOF!=scanf("%d*x^%d",&(data1->p),&(data1->e)))
    {
        data1->next=do_malloc();
        temp=data1;
        data1=data1->next;
    }
    temp->next=NULL;
    free(data1);
    while('\n'!=getchar());
    while(EOF!=scanf("%d*x^%d",&(data2->p),&(data2->e)))
    {
        data2->next=do_malloc();
        temp=data2;
        data2=data2->next;
    }
    temp->next=NULL;
    free(data2);
    switch(chose)
    {
    case 1:
        {
            Add_Polynomial(head1,head2);
            do_print(head1);
            break;
        }
    case 2:
        {
            temp=head1;
            while(temp)//取反,将减法与加法用同一个函数进行
            {
                temp->p=-(temp->p);
                temp=temp->next;
            }
            Add_Polynomial(head1,head2);
            do_print(head1);
            break;
        }
    default:break;
    }

 } 
2012-10-06 00:25
快速回复:qiu关于未知数据量的输入如何结束的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031828 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved