1

Совсем недавно погрузился в изучение языка C. Дошел до массивов данных и захотел применить некоторые знания на практике, но произошел коллапс. Суть программы такова: пользователь должен вводить 5-ти буквенное слово, далее в этом слове заменяется 1 буква. Какую именно букву заменить и на какую букву должен вводить тоже пользователь. В первом коде не срабатывает строка swap = getchar(),т.е ввод не происходит и программа продолжает свою работу.

int main(void)
{

char name[5];
printf("Enter a five-digit word: ");
scanf("%s", &name);

unsigned char swap_let;
printf("Enter the letter you want to change: ");
swap = getchar();

int swap_deg;
printf("Enter the number of the letter you want to change: ");
scanf("%d", &swap_deg);


switch(swap_deg)
{
    case 1:
        name[0] = swap_let;
        break;
    case 2:
        name[1] = swap_let;
        break;
    case 3:
        name[2] = swap_let;
        break;
    case 4:
        name[3] = swap_let;
        break;
}

printf("New name is: %s", name);


getchar();
return 0;
}

Но если я строку swap = getchar() закину в начало функции main, как в этом коде, то всё работает как надо(только в не правильном порядке).

int main(void)
{

unsigned char swap_let;
printf("Enter the letter you want to change: ");
swap = getchar();

char name[5];
printf("Enter a five-digit word: ");
scanf("%s", &name);



int swap_deg;
printf("Enter the number of the letter you want to change: ");
scanf("%d", &swap_deg);


switch(swap_deg)
{
    case 1:
        name[0] = swap_let;
        break;
    case 2:
        name[1] = swap_let;
        break;
    case 3:
        name[2] = swap_let;
        break;
    case 4:
        name[3] = swap_let;
        break;
}

printf("New name is: %s", name);


getchar();
return 0;
}

Помогите масленку с проблемой, возможно я как-то туплю, просидел около 1.5 часа и так и не разобрался.

kot-da-vinci
  • 3,610
  • 1
    Здесь принято давать код в виде текста, а не скриншотами... И так, для начала - пятибуквенное слово в массив из 5 символов не влезет - нужно место для нулевого символа. – Harry Sep 20 '18 at 18:42
  • Прошу прощения, учту в дальнейшем. – Афдей Петров Sep 20 '18 at 18:44
  • Учтите сейчас. Потому что набирать ваш код со скрина, чтоб разбираться, что и как у вас происходит - вряд ли кто-то станет... – Harry Sep 20 '18 at 18:45
  • учёл, еще раз извиняюсь. – Афдей Петров Sep 20 '18 at 18:52
  • В операторе scanf("%s", &name); симол & - лишний, так как имя массива и так уже является указателем на первый элемент массива. – Sergey Sep 21 '18 at 09:19
  • Весь оператор switch заменятся одной строкой name[swap_deg-1] = swap_let – Sergey Sep 21 '18 at 09:22
  • В операторе печати добавьте символ перевода строки printf("New name is: %s\n", name); и всё у Вас заработает! :-) – Sergey Sep 21 '18 at 09:23

1 Answers1

0

Вот что вы хотели:

int main(void)
{

    char name[6];
    printf("Enter a five-digit word: ");
    scanf("%s", name);

    while(getchar() != '\n');

    printf("Enter the letter you want to change: ");
    char swap_let = getchar();

    int swap_deg;
    printf("Enter the number of the letter you want to change: ");
    scanf("%d", &swap_deg);

    name[swap_deg-1] = swap_let;

    printf("New name is: %s", name);

    getchar();
}

А почему сделано так, как сделано - читайте тут.

Harry
  • 221,325