считать символ в строке (C) - вопрос - PullRequest
0 голосов
/ 09 ноября 2019

Я должен написать программу на C, которая находит количество появлений персонажа, которого я выбираю. Это мой код: почему, если я удалю жирную строку, программа больше не будет работать? Я имею в виду, я не понимаю, что делает эта линия.

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

int number(char c)
{
    int i,nr=0;
    char s[50];
    printf("Enter a string: ");
    fgets(s,49,stdin);
    for(i=0;i<strlen(s);++i)
        {
            if(s[i]==c)
            {
                nr++;
            }
        }
    return nr;
}

int main()
{
    int nra;
    char b;
    printf("Enter a character you want to count: ");
    b=getc(stdin);
    **getc(stdin);**
    printf("Call the function\n");
    nra=number(b);
    printf("The number of apparitions of chracter %c is  %d",b,nra);
    return 0;
}

1 Ответ

1 голос
/ 09 ноября 2019

Почему, если я удалю жирную линию, программа больше не будет работать? Со строкой

getc(stdin);

Когда вы вводите символ (читается в b), вы оставляете символ новой строки во входном потоке. И функция fgets() читает этот символ новой строки и прекращает чтение дальнейших вводных данных. Вот почему дополнительный вызов getc() заставляет его работать, поскольку он потребляет символ новой строки - так что fgets() ждет вашего предполагаемого ввода.

Стандартные функции ввода из stdio (scanf, fgets,getc и т. Д.) Причудливы и часто приводят к тонким ошибкам. Обычно предпочитается читать входные данные построчно, а затем анализировать, чтобы минимизировать неожиданные ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...