Суть вопроса такова. Результатом работы представленной программы является поиск строк, в которых содержится ключевое слово и вывод их на экран после ввода. То есть должно получиться что-то вроде следующего:
По образцу "ould" из текста
Ah Love! could you and I with Fate conspire
To grasp this sorry Scheme of Things entire,
Would not we shatter it to bits — and then
Re-mould it nearer to the Heart's Desire!
должны быть выбраны строки
Ah Love! could you and I with Fate conspire
Would not we shatter it to bits — and then
Re-mould it nearer to the Heart's Desire!
Но проблема состоит в том, что вывод происходит сразу после обнаружения первой такой строки, а не после конца ввода всего текста.
Помогите пожалуйста разобраться с тем, как организовать вывод обнаруженных строк именно после окончания ввода - допустим после двойного \n.
Спасибо.
#include <stdio.h>
#define MAXLINE 1000 /* максимальный размер вводимой строки */
int getline(char line[], int max);
int strindex(char source[], char searchfor[]);
char pattern[] = "ould"; /* образец для поиска (литерал) */
/* найти все строки, содержащие образец */
int main(void)
{
char line[MAXLINE];
int found = 0;
while (getline(line, MAXLINE) > 0)
if (strindex(line, pattern) >= 0){
printf ("%s\n", line);
found++;
}
return found;
}
/* getline: читает строку в s, возвращает длину */
int getline(char s[], int lim)
{
int c, i;
for (i = 0; i < lim && (c = getchar()) != EOF && c != '\n'; i++){
s[i] = c;
}
if (c == '\n') s[i] = c;
s[i] = '\0';
return i;
}
/* strindex: вычисляет место t в s или выдает -1, если t нет в s */
int strindex(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++) {
for (j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
;
if (k > 0 && t[k] == '\0')
return i;
}
return -1;
}