Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有int和char的堆栈的C程序_C - Fatal编程技术网

具有int和char的堆栈的C程序

具有int和char的堆栈的C程序,c,C,我有一个家庭作业要做,问题是这样的: 从用户处接收最多20个整数,并将它们放入stackstatic堆栈中,通过按键盘上的“o”,堆栈按相反顺序弹出数字。 老师提示:从堆栈中逐个弹出数字 我的问题是这个程序正在用“o”打印输入的相反方向。 如果我输入一个两位数的数字,它也会以相反的顺序打印他。例如:67-->76 到目前为止,我尝试了我所知道的一切,甚至向二年级学生寻求他们无法提供的帮助。所以我来这里检查我的代码有什么问题 我的主要意见是: int i , x = 0 ,count = 0;

我有一个家庭作业要做,问题是这样的: 从用户处接收最多20个整数,并将它们放入stackstatic堆栈中,通过按键盘上的“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));
    }

您的问题是操作顺序:您总是在读取输入后立即将其推送到堆栈上。只有在之后,您才能测试用户是否输入了“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*会导致未定义的行为。您应该会收到大量编译器警告。阅读它们,修正它们。嘿,谢谢你的回复。好的,我马上就去。嘿,我已经试过了。没有成功,介意为我写一个例子,我可以从中学习吗?