C程序中的输入

C程序中的输入,c,C,我写了一个程序来生成单项式和多项式,并打印单项式和多项式。数据是从键盘输入的。例如,首先输入数据3的组数,然后输入数据:1,3,2,4,3,6,3,4,2(每组有3个元素)。我需要输出单项式Y^{1}{2,3}Y^{4}{3,6}Y^{3}{4,2}。我的程序可以运行。但是输出是不正确的。我认为这个计划的问题在下面的部分。我认为scanf在以下方面不好。有没有其他更好的输入法来解决这个问题?整个计划正在进行中 单项式创建\单项式(整数)/*创建单项式*/ { 单项式m,s; 单项式p; int

我写了一个程序来生成单项式和多项式,并打印单项式和多项式。数据是从键盘输入的。例如,首先输入数据3的组数,然后输入数据:1,3,2,4,3,6,3,4,2(每组有3个元素)。我需要输出单项式Y^{1}{2,3}Y^{4}{3,6}Y^{3}{4,2}。我的程序可以运行。但是输出是不正确的。我认为这个计划的问题在下面的部分。我认为scanf在以下方面不好。有没有其他更好的输入法来解决这个问题?整个计划正在进行中

单项式创建\单项式(整数)/*创建单项式*/
{
单项式m,s;
单项式p;
int i;
printf(“请输入参数(例如,2,2,3表示单项式P^{2}{2,3})。P的第一个下标i应按递增顺序排列。”);
m=(单项式)malloc(sizeof(单项式节点));
m->head=m->tail=(单项式)malloc(sizeof(单项式节点));
如果(m->head==NULL)
{
返回NULL;
}
m->head->next=m->tail;
m->tail->next=NULL;
p=(单项式)malloc(sizeof(单项式节点));
m->head->next=p;
p->next=m->tail;
scanf(“%d”和((p->y.l));
scanf(“%d”和((p->y.i));
scanf(“%d”和((p->y.k));
如果(数字>1)
{
对于(i=0;iy.l));
scanf(“%d”和((s->y.i));
scanf(“%d”和((s->y.k));
s->next=p->next;/*插入节点a*/
p->next=s;
免费的;
}
}
返回m;
}

scanf
是一个不错的选择,但它可能有点特别。我认为在这种情况下,您需要像“%d,%d,%d”这样的scanf格式。然而,最好的办法是编写一个简单的C程序,只需输入数据并进行实验。看起来像

 int main(){
     int x, y, z ;

     scanf("%d,%d,%d", &x, &y, &z);
     printf("%d,%d,%d\n", x,y,z);
     return 0;
 }

一旦你有了工作,让真正的程序工作应该是简单的。

免费的()意味着你正在破坏你刚刚创建的单项式。您在其上方创建的指针(来自
p
)意味着您在处理
m

时将指向一个潜在的无效内存位,因为您没有显示错误的输出是什么,因此我只能对问题可能是什么进行有根据的猜测,但除了错误的
scanf()
调用和对
free
的调用,即删除列表中额外分配的节点,则
head
tail
的节点为“空”。因此,当您遍历链接列表时,您需要考虑
head
tail
节点是空的,否则您将得到这些节点的一些奇数值,因为它们未初始化。

您已经发布了吗?不要强制转换
malloc
的返回值。强制转换充其量是多余的,可能会隐藏编译器在没有强制转换的情况下捕获的错误。还有什么是
单项式
单项式节点
?它们是等价类型吗?@pmg,它们不是等价类型。它们被定义为typedef struct node/*一个节点表示一个P_{i,k}^{l}*/{int l,i,k;}节点;typedef struct monomal_node/*a monomal表示一个单项式P{i,k}{l}\cdots P{i',k'}/{l'}/{node y;int coeff;/coeff is s(m_r)*/struct monomial_node*下一个;struct monomial_node*头;struct monomial_node*尾;}monomial_node,*单项式
@pmg,它们是在上面的链接中定义的。啊!typedefs隐藏了类型的指针属性,啊!我喜欢用对象本身的大小来定义malloc:
p=malloc(sizeof*p)在循环中,I s再次被s=(单项式)malloc(sizeof(单项式节点))分配内存@数学123——自由是删除一个你仍然指向的对象;重复使用变量s的事实与此无关。我知道这一点。但我需要很多x1,y1,z1,x2,y2,z2,。。。它们由循环输入。还有一些问题。
 int main(){
     int x, y, z ;

     scanf("%d,%d,%d", &x, &y, &z);
     printf("%d,%d,%d\n", x,y,z);
     return 0;
 }