Задать вопрос
@LevMIX
Чайник

Почему не работает ввод?

Код должен прекращать обрабатывать текст на фразе Dragon flew away! однако этого не происходит почему-то
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ADDITIONAL_DATA 100

int main() {
    char** text = (char**) malloc(sizeof(char*)* ADDITIONAL_DATA);
    int cntSentence = 1;
    int capasityText = ADDITIONAL_DATA;
    for (int i = 0; i < cntSentence; i++)
    {
        
        text[i] = (char*) malloc(sizeof(char) * ADDITIONAL_DATA);
        char symbol = getchar();
        int idxSymbol = 0;
        int capasitySentence = ADDITIONAL_DATA;
        while(1)
        {
            text[i][idxSymbol] = symbol;
            idxSymbol++;
            if (symbol == '.' || symbol == ';' || symbol == '?')
                break;
            if (idxSymbol == capasitySentence-1)
            {
                capasitySentence += ADDITIONAL_DATA;
                text[i] = (char*) realloc(text[i], sizeof(char)*capasitySentence);
            }
            symbol = getchar();
        }
        text[i][idxSymbol] = '\0';
        cntSentence++;
        
        if (strcmp(text[i], "Dragon flew away!") == 0)
            break;
        
        if (cntSentence == capasityText-1)
        {
            capasityText += ADDITIONAL_DATA;
            text = (char**) realloc(text, sizeof(char*)*capasityText);
        }
        
    }
    
    for (size_t i = 0; i < cntSentence; i++)
    {
        printf("%s\n", text[i]);
        free(text[i]);
    }
    free(text);
    
    
    return 0;
}
  • Вопрос задан
  • 286 просмотров
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Попробуйте ваши строки на экран выводить. Нет ли там всяких лишних пробелов или переводов строк? Завершается ли программа, если ввести только конечную фразу? А если вы вводите что-то вроде "abc. Dragon flew away!", то строка будет " Dragon flew away!".
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В вашем коде строка не может заканчиваться восклицательным знаком. В конце строки у вас всегда либо точка, либо точка с запятой, либо знак вопроса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы