Значения изменяются после 'scanf' - PullRequest
0 голосов
/ 30 апреля 2019

Я ищу реализовать стек в c. Пытаясь реализовать это, я столкнулся с проблемой, с которой ни я, ни мой учитель не знаем, что делать. Я инициализирую некоторые значения в struct (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

Заранее спасибо!

1 Ответ

4 голосов
/ 30 апреля 2019

Вы пытаетесь прочитать строку (% s -> char *) в char, который работает, но перезапишет данные рядом с char.Здесь:

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

Должно быть:

char menuInput;
[...]
scanf("\n%c", &menuInput); //USER INPUT 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...