我必须在C上创建一个程序,允许用户输入一个浮点数堆栈,然后progmar应该打印堆栈。我试图让它工作,但它看起来我弄乱了一些东西,因为它正确地返回堆栈的所有元素,但也返回"堆栈是空的" "堆栈的元素是:0.0000"在屏幕上所有其他与0不同的元素之后......
到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
float stack[10];
int top=-1;
void Write(float x)
{
if(top==9)
printf("The stack is Full ! \n");
else
{
top++;
stack[top]=x;
}
}
float Read()
{
if(top==-1)
{
printf("The stack is empty ! \n");
return 0;
}
else
{
float value;
value=stack[top];
top--;
return value;
}
}
int main()
{
float x;
do
{
printf("Molq vyvedete razlichen ot nula element na stecka: ");
scanf("%f", &x);
if(x!=0.0)
Write(x);
}while(x!=0.0);
do
{
x=Read();
printf("Elementite na stecka sa: %f \n", x);
}while(x!=0.0);
system("PAUSE");
return 0;
}
如何消除空堆叠按摩和屏幕元素上显示的0.0000?
答案 0 :(得分:1)
read
是一个读入文件的预定义函数。你调用它的方式使它失败,从而返回-1。实际上,您定义了一个Read
函数,但调用了read
。
堆栈操作的标准名称为push
和pop
...
答案 1 :(得分:1)
首先,您的计划中存在拼写错误。您将一个函数命名为Read
但请将其称为read
。
另一个问题是逻辑错误。在这个循环中
do
{
printf("Please enter differentt then 0 element of the stack: ");
scanf("%f", &x);
write(x);
}while(x!=0.0);
值0.0将放在堆栈中。那么下一个循环
do
{
x=read();
printf("The elements of the stack are: %f \n", x);
}while(x!=0.0);
在读取堆栈中的顶部值(等于0.0,
)后停止迭代至少改变第一个循环
do
{
printf("Please enter differentt then 0 element of the stack: ");
scanf("%f", &x);
if ( x != 0.0 ) write(x);
}while(x!=0.0);
如果添加空和满的功能会更好。
在这种情况下,循环可以写成
while ( !full() )
{
printf("Please enter differentt then 0 element of the stack: ");
scanf("%f", &x);
write(x);
}
和
while ( !empty() )
{
x=read();
printf("The elements of the stack are: %f \n", x);
}