具有int和char的堆栈的C程序
我有一个家庭作业要做,问题是这样的: 从用户处接收最多20个整数,并将它们放入stackstatic堆栈中,通过按键盘上的“o”,堆栈按相反顺序弹出数字。 老师提示:从堆栈中逐个弹出数字 我的问题是这个程序正在用“o”打印输入的相反方向。 如果我输入一个两位数的数字,它也会以相反的顺序打印他。例如:67-->76 到目前为止,我尝试了我所知道的一切,甚至向二年级学生寻求他们无法提供的帮助。所以我来这里检查我的代码有什么问题 我的主要意见是:具有int和char的堆栈的C程序,c,C,我有一个家庭作业要做,问题是这样的: 从用户处接收最多20个整数,并将它们放入stackstatic堆栈中,通过按键盘上的“o”,堆栈按相反顺序弹出数字。 老师提示:从堆栈中逐个弹出数字 我的问题是这个程序正在用“o”打印输入的相反方向。 如果我输入一个两位数的数字,它也会以相反的顺序打印他。例如:67-->76 到目前为止,我尝试了我所知道的一切,甚至向二年级学生寻求他们无法提供的帮助。所以我来这里检查我的代码有什么问题 我的主要意见是: int i , x = 0 ,count = 0;
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));
}
您的问题是操作顺序:您总是在读取输入后立即将其推送到堆栈上。只有在之后,您才能测试用户是否输入了“o”。颠倒循环内操作的顺序以修复此问题:
for (;;) {
// read input
// test if input is "o" and exit loop
// convert input to number and push onto stack.
}
此外,我建议从输入中读取字符串,而不是字符。这样,用户就可以正确地输入多位数。为什么要将整数视为字符?在几乎所有情况下,字符都可以视为整数,除非使用运算符和的地址传递指针。int*类型与char*非常不同。scanf格式说明符和参数类型不匹配,如使用%c并传递int*会导致未定义的行为。您应该会收到大量编译器警告。阅读它们,修正它们。嘿,谢谢你的回复。好的,我马上就去。嘿,我已经试过了。没有成功,介意为我写一个例子,我可以从中学习吗?