Как мне повторить Scanf и заменить значение? - PullRequest
0 голосов
/ 12 февраля 2020
char *stack[13];
char INteger[100];
int top = -1;


int main () {
int current = 0;


    while (current < 2) {  

        Yfunc();
        printf("cell zero %s \n", stack[0]);
        printf("cell one %s \n", stack[1]);


void Yfunc() {

    printf("Please enter a string: \n");
    scanf("%s", INteger);
    push(INteger);

}
}

char *push(char input[]) {
     top++;
     stack[top] = input;
 }

По сути, пользователь должен вводить строку, скажем, «Корова». Эта строка затем помещается в стек (это работает). Тем не менее, когда я пу sh во второй раз, стек становится все испорчено. Я предполагаю, что не могу сканировать (INteger) несколько раз? Если нет, то как это исправить?

1 Ответ

1 голос
/ 12 февраля 2020

Таким образом, ваш stack сохраняет адрес памяти, но фактически не копирует содержимое. Решение может быть таким:

#include<stdio.h>
#include<string.h>

char stack[13][100];
char INteger[100];
int top = -1;

void push(char* input) {
   memcpy(stack[++top], input, 100);
}

void Yfunc() {
  printf("Please enter a string: \n");
  scanf("%s", INteger);
  push(INteger);
}

int main () {
  int current = 0;

  while (current++ <= 2) {  
        Yfunc();
        printf("cell zero %s \n", stack[0]);
        printf("cell one %s \n", stack[1]);
  }
}
...