我有一个家庭作业要做,问题是这样的: 从用户那里接收最多20个整数并将其推入堆栈(静态堆栈),方法是按键盘上的'o',堆栈以相反的顺序弹出数字。 提示(来自我的老师):从堆栈中逐个弹出数字。
我的问题是该程序在输入时用'o'进行反向打印。 如果我输入一个两位数的数字,它也会以相反的顺序打印他。例如:67 ---> 76。
我尝试了到目前为止所知道的一切,甚至向二年级学生寻求他们无法提供的帮助。所以我在这里检查我的代码出了什么问题。
我的主要人:
int i , x = 0 ,count = 0;
stack s1;
stack_init(&s1);
printf("Please enter numbers: \n");
scanf_s("%c", &x);
while(x != 'o' )
{
scanf_s("%c", &x);
stack_push(&s1, x);
count++;
}
for (i = 0; i < count; i++)
{
printf("%c", stack_pop(&s1));
}
答案 0 :(得分:3)
您的问题是操作顺序:您总是在读取输入后立即将其推入堆栈。之后,您才测试用户是否输入了'o'
。反转循环中的操作顺序即可解决此问题:
for (;;) {
// read input
// test if input is "o" and exit loop
// convert input to number and push onto stack.
}
此外,我建议从输入中读取字符串而不是字符。这样,用户可以正确输入多位数的数字。