我希望在c中实现一个堆栈。在尝试实现这一目标时,我遇到一个我和我的老师都不知道该怎么办的问题。我在struct(堆栈)中初始化了一些值,在调用scanf函数之后,该堆栈中的元素值似乎由于某种原因而发生了变化。
我将代码减少到最低限度,问题仍然存在。另外,这似乎在我的计算机上是一个问题,但是当我在另一台计算机上尝试该程序时,它可以神奇地工作。我尽量不要说“我的电脑做错了”,但这很令人沮丧。
代码示例:
#include <stdio.h>
typedef struct Stack {
int elementSize;
} Stack;
int stackInit(Stack *stack, int elementSize);
int main(int argc, char *argv[]){
Stack stack;
stackInit(&stack,sizeof(int));
char menuInput;
printf("[main] stack->elementSize = %d\n",stack.elementSize); //OK
scanf("\n%s", &menuInput); //USER INPUT
printf("[main] stack->elementSize = %d\n",stack.elementSize); //NOK
}
int stackInit(Stack *stack, int elementSize){
stack->elementSize = elementSize;
printf("[stackInit] stack->elementSize = %d\n",stack->elementSize); //OK
return 0;
}
输出:
[stackInit] stack->elementSize = 1
[main] stack->elementSize = 1
1
[main] stack->elementSize = 0
提前谢谢!
答案 0 :(得分:4)
您尝试将字符串(%s-> char *)读入可以工作的char,但将覆盖char旁边的数据。在这里:
char menuInput;
[...]
scanf("\n%s", &menuInput); //USER INPUT
应该是:
char menuInput;
[...]
scanf("\n%c", &menuInput); //USER INPUT