Мой код не видит витую петлю в C (с функцией getchar) - PullRequest
0 голосов
/ 27 октября 2019

Моя программа не видит цикл while, и я не могу ввести мое перемешивание в переменную c

Я хочу ввести строку. если символ в этой строке будет числом, он останется как число, если он не будет числом, он изменится на char 'num' поместите дальше в ascii код.

#include <stdio.h>
#include <ctype.h>

int main()
{

    int num;
    char c;

    printf("Enter number: \n");
    scanf("%d", &num);

    printf("Enter a string : \n");
    while ((c = getchar()) != '\n')
    {
        if (isdigit(c))
        {
            putchar(c);
        }
        else
        {
            putchar(c + num);
        }
    }

    return 0;
}

1 Ответ

0 голосов
/ 27 октября 2019

При использовании scanf() и getchar() вам обычно приходится нажимать клавишу [return] после требуемой клавиши. И требуемый ключ, и ключ возврата (обычно) помещаются в поток stdin. Код вопроса не учитывал это. Следовательно, первый требуемый ключ был прочитан scanf() и сохранен в num, но оставил ключ возврата '\n' в буфере;который затем был прочитан getchar() и сохранен в c. Следовательно, критерии выхода из цикла были выполнены, и программа завершилась.

Каким-то образом код, чтобы быть функциональным, должен прочитать нежелательный ключ возврата '\n', оставленный после вызова scanf(); и, возможно, также дляgetchar().

Возможно, что-то вроде:

#include <stdio.h>
#include <ctype.h>

int main()
{
    int num;
    int c;
    char cr[2];
    printf("Enter number: \n");
    scanf("%d%1[\n]", &num, cr);  // Reads %d into num, and garbage '\n' into cr.
    printf("Enter a string : \n");
    while((c = getchar()) != '\n')
    {
        if(isdigit(c))
            putchar(c);
        else
            putchar(c + num);
        getchar(); // Reads garbage '\n' from previous getchar()
    }
    printf("\n");
    return 0;
}
...