语言是葡萄牙语,但我想你已经明白了。我的main只调用菜单函数(注释中的函数是可以工作的test )。
在菜单中,我引入了选项1,它调用相同的函数。但是有些地方不对劲。
如果我只在输入上测试它:
(1/1)x^2 //它读取多项式(2/1) //读取有理数并返回4
(你可以猜到它是做什么的,计算x的一个实例的值,而不是有理的)
我的多项式是具有系数(有理)和度(整数)的线性链表
int main ()
{
menu_interactivo ();
// instanciacao ();
return 0;
}
void menu_interactivo(void)
{
int i;
do{
printf("1. Instanciacao de um polinomio com um escalar\n");
printf("2. Multiplicacao de um polinomio por um escalar\n");
printf("3. Soma de dois polinomios\n");
printf("4. Multiplicacao de dois polinomios\n");
printf("5. Divisao de dois polinomios\n");
printf("0. Sair\n");
scanf ("%d", &i);
switch (i)
{
case 0: exit(0);
break;
case 1: instanciacao ();
break;
case 2: multiplicacao_esc ();
break;
case 3: somar_pol ();
break;
case 4: multiplicacao_pol ();
break;
case 5: divisao_pol ();
break;
default:printf("O numero introduzido nao e valido!\n");
}
}
while (i != 0);
}当我使用菜单调用它时,使用相同的输入,它不会停止阅读多义词(我之所以知道这一点,是因为它不像在另一个例子中那样要求我提供rational )。
我使用valgrind --track-origins=yes运行它,返回以下内容:
==17482== Memcheck, a memory error detector
==17482== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==17482== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==17482== Command: ./teste
==17482==
1. Instanciacao de um polinomio com um escalar
2. Multiplicacao de um polinomio por um escalar
3. Soma de dois polinomios
4. Multiplicacao de dois polinomios
5. Divisao de dois polinomios
0. Sair
1
Introduza um polinomio na forma (n0/d0)x^e0 + (n1/d1)x^e1 + ... + (nk/dk)^ek,
com ei > e(i+1):
(1/1)x^2
==17482== Conditional jump or move depends on uninitialised value(s)
==17482== at 0x401126: simplifica_f (fraccoes.c:53)
==17482== by 0x4010CB: le_f (fraccoes.c:30)
==17482== by 0x400CDA: le_pol (polinomios.c:156)
==17482== by 0x400817: instanciacao (t4.c:14)
==17482== by 0x40098C: menu_interactivo (t4.c:68)
==17482== by 0x4009BF: main (t4.c:86)
==17482== Uninitialised value was created by a stack allocation
==17482== at 0x401048: le_f (fraccoes.c:19)
==17482==
==17482== Conditional jump or move depends on uninitialised value(s)
==17482== at 0x400D03: le_pol (polinomios.c:163)
==17482== by 0x400817: instanciacao (t4.c:14)
==17482== by 0x40098C: menu_interactivo (t4.c:68)
==17482== by 0x4009BF: main (t4.c:86)
==17482== Uninitialised value was created by a stack allocation
==17482== at 0x401048: le_f (fraccoes.c:19)
==17482== 现在,我将向您提供名为
void le_pol (pol *p)
{
fraccao f;
int e;
char c;
printf ("Introduza um polinomio na forma (n0/d0)x^e0 + (n1/d1)x^e1 + ... + (nk/dk)^ek,\n");
printf("com ei > e(i+1):\n");
*p = NULL;
do
{
le_f (&f);
getchar();
getchar();
scanf ("%d", &e);
if (f.n != 0) //polinomios.c line 163
*p = add (*p, f, e);
c = getchar ();
if (c != '\n')
{
getchar();
getchar();
}
}
while (c != '\n');
}
void instanciacao (void)
{
pol p1;
fraccao f;
le_pol (&p1);
printf ("Insira uma fraccao na forma (n/d):\n");
le_f (&f);
escreve_f(inst_esc_pol(p1, f));
}
void le_f (fraccao *f)
{ //line fraccoes.c line 19
int n, d;
getchar ();
scanf ("%d", &n);
getchar ();
scanf ("%d", &d);
getchar ();
assert (d != 0);
*f = simplifica_f(cria_f(n, d));
}simplifica_f简化了rational,而cria_f创建了给定分子和分母的有理
有人能帮帮我吗?提前谢谢。
如果你想让我提供一些测试,就把它贴出来吧。
再见。
发布于 2010-12-30 01:22:07
只需插入一个
getchar()在从菜单中读取int之后,您就完成了^^
问题是由于您在菜单选项后输入的未读'\n‘导致的。使用该调用丢弃它,一切都会按计划进行。
https://stackoverflow.com/questions/4534885
复制相似问题