Нужен ли getchar? - PullRequest
       1

Нужен ли getchar?

0 голосов
/ 07 апреля 2020
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<assert.h>
#define MAX_CHARACTERS 1005
#define MAX_PARAGRAPHS 5

char* get_input_text() {
    int paragraph_count;
    scanf("%d", &paragraph_count);

    char p[MAX_PARAGRAPHS][MAX_CHARACTERS], doc[MAX_CHARACTERS];
    memset(doc, 0, sizeof(doc));
    getchar();
    for (int i = 0; i < paragraph_count; i++) {
        scanf("%[^\n]%*c", p[i]);
        strcat(doc, p[i]);
        if (i != paragraph_count - 1)
           strcat(doc, "\n");
    }

    char* returnDoc = (char*)malloc((strlen (doc)+1) * (sizeof(char)));
    strcpy(returnDoc, doc);
    return returnDoc;
}

int main()
{
    char* text = get_input_text();
    printf("%s",text);
    return 0;
}

Ввод

2
Learning C is fun.
Learning pointers is more fun.It is good to have pointers.

Если я уберу getchar () ;. Программа не работает, почему это? Другой мудрый код работает нормально и выводит точный ввод как вывод.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

scanf("%[^\n]%*c", p[i]); Означает чтение строки и игнорирование символа ('\ n').

В scanf("%d", &paragraph_count) вы читаете int, но оставляете в буфере '\ n'.

Таким образом, вам нужно getchar(), чтобы игнорировать '\ n', или следующий сканф встретит '\ n' в начале и ничего не прочитает.

0 голосов
/ 07 апреля 2020

когда вы попытаетесь ввести данные для этого scanf("%d", &paragraph_count);, вы введете целое число и затем нажмите клавишу ввода, scanf примет точный введенный вами ввод, что означает целое число, но оставляет \n, созданный клавишей ввода в буфере, поэтому, если вы не используете getchar();, следующий scanf (scanf("%[^\n]%*c", p[i]);) примет \n в качестве входного символа. но когда вы используете getchar(), эта функция возьмет \n из буфера, а следующая scanf будет работать нормально.

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