值在'scanf'之后改变

时间:2019-04-30 08:11:05

标签: c

我希望在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

提前谢谢!

1 个答案:

答案 0 :(得分:4)

您尝试将字符串(%s-> char *)读入可以工作的char,但将覆盖char旁边的数据。在这里:

char menuInput;
[...]
scanf("\n%s", &menuInput); //USER INPUT 

应该是:

char menuInput;
[...]
scanf("\n%c", &menuInput); //USER INPUT