gpt4 book ai didi

C - 循环意外结束

转载 作者:太空狗 更新时间:2023-10-29 16:12:37 25 4
gpt4 key购买 nike

所以我试图在 C 中为后缀程序创建一个中缀,但是当我开始输入符号时,循环在第一个条目处结束。

我很确定这是某个地方的数据类型问题,但我无法弄清楚哪里..

代码如下:

#include <stdio.h>
#include <stdlib.h>

static int N;
static char *s;

void stackinit(int max){
s = malloc(max*sizeof(int));
N = 0;
}

int stackempty(){
if(N==0)
return(1);
else
return(0);
}

void stackpush(char item){
s[N] += item;
N++;
}

int stackpop(){
N--;
return(s[N]);
}

int priority(char x){
if(x == '+' || x == '-')
return(0);
if(x == '*' || x == '/')
return(1);
}
int main(void){
int i,sum;
char input;

printf("Infix to Postfix\n");
printf("How many characters will you enter?");
scanf("%d", &sum);
stackinit(sum);

for(i = 0; i < sum; i++){
printf("Enter character: ");
scanf("%s", &input);
stackpush(input);
}
while(!stackempty()){
printf("%d ", stackpop());
}
/*for(i = 0; i < sum; i++){

}*/
}

最佳答案

scanf() 使用 %c 来读取字符,所以你的代码应该是

scanf(" %c", &input);

通过在 %c 说明符后添加一个空格,您还可以使用可能无意添加的任何新行或空格字符,然后更正您的循环问题。

另一种想法是,您需要在字符串上附加一个额外的字符:一个空字符,即 '\0' 字符。这就是为什么您需要执行 s = malloc(max*sizeof(int) + 1);,以便为您的 '\0' 留出空间,在您的情况下,您可以在 stackPush() 函数上动态添加,如下所示:

void stackpush(char item){
s[N++] = item;
s[N] = '\0';
}

此外,在您的stackPush 函数中,您想要的是s[N] = item;,而不是s[N] += item;

More on C Strings

关于C - 循环意外结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22052502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com