Почему не добавляются значения в массив - C (СИ)
Формулировка задачи:
Решая задачу из K&R написал вот это
программа должна вывести после ввода EOF все слова входного потока, которые длиннее 5 символов, но выводится почему-то только первое слово, подскажите где я ошибся
ps если тут явные косяки - подскажите, где почитать, может сам допру, спасибо всем ответившим заранее
#include <stdio.h>
#define MAXLINE 1000
int getline2(char line[], int maxline);
int copy(char to[], char from[]);
main()
{
int len, max, i, j;
char line[MAXLINE], all[MAXLINE];
i = j = 0;
while ((len = getline2(line, MAXLINE)) > 0) {
if (len > 5) {
while (i <= len) {
/*printf("%s", all, line);*/
all[j] = line [i];
++j;
++i;
}
i = 0;
}
}
printf("%s", whole);
return 0;
}
int getline2(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
*s[i] = '\0';*
return i;
}Решение задачи: «Почему не добавляются значения в массив»
textual
Листинг программы
#include <stdio.h>
#define MAXLINE 1000
int getline2(char line[], int maxline);
int copy(char to[], char from[]);
main()
{
int len, max, i, j;
char line[MAXLINE], all[MAXLINE];
i = j = 0;
while ((len = getline2(line, MAXLINE)) > 0) {
if (len > 5) {
while (i <= len) {
/*printf("%s", whole, line);*/
all[j] = line [i];
++j;
++i;
}
/*--j;*/
i = 0;
}
}
printf("%s", all);
return 0;
}
int getline2(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
/*s[i] = '\0';*/
return i;
}
Объяснение кода листинга программы
Код представлен на языке C и выполняет следующие действия:
- Ввод данных: Программа считывает строки из стандартного ввода (клавиатуры или другого источника данных). Размер каждой строки не должен превышать 1000 символов.
- Обработка данных: В основной функции
main()создаются две переменные:lineиall. Переменнаяlineиспользуется для хранения текущей строки, а переменнаяall- для хранения всех собранных строк. Изначально обе переменные пусты. - Цикл считывания строк и их обработки: В основном цикле программы, пока не достигнут конец файла (EOF), происходит следующее:
- Если длина текущей строки превышает 5 символов, то начинается обработка этой строки.
- Строка копируется в переменную
allс добавлением каждого символа в массив. - После обработки строки, программа возвращается к началу цикла для считывания следующей строки.
- Вывод результата: После окончания цикла программа выводит на экран весь собранный текст.
- Функции: В коде определены две функции:
getline2()иcopy(). Функцияgetline2()используется для считывания строки из стандартного ввода и возвращает количество считанных символов (или -1 при достижении конца файла). Функцияcopy()используется для копирования строки из одного массива в другой. Возможная проблема с кодом может быть связана с отсутствием добавления символов в массивall. Это может произойти, если длина текущей строки меньше или равна 5 символам. В этом случае, условиеif (len > 5)не выполняется и цикл обработки строки не запускается.