gpt4 book ai didi

c - 值在 'scanf' 之后发生变化

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:20 24 4
gpt4 key购买 nike

我想用 c 语言实现一个堆栈。在尝试实现这一点时,我遇到了一个问题,我和我的老师都不知道该怎么做。我在结构 (Stack) 中初始化了一些值,在调用 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(char));
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

提前致谢!

最佳答案

您尝试将一个字符串 (%s -> char*) 读入一个有效的 char,但会覆盖该 char 旁边的数据。这里:

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

应该是:

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

关于c - 值在 'scanf' 之后发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916524/

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