Почему не добавляются значения в массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Решая задачу из K&R написал вот это
#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;
}
программа должна вывести после ввода EOF все слова входного потока, которые длиннее 5 символов, но выводится почему-то только первое слово, подскажите где я ошибся ps если тут явные косяки - подскажите, где почитать, может сам допру, спасибо всем ответившим заранее

Решение задачи: «Почему не добавляются значения в массив»

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 и выполняет следующие действия:

  1. Ввод данных: Программа считывает строки из стандартного ввода (клавиатуры или другого источника данных). Размер каждой строки не должен превышать 1000 символов.
  2. Обработка данных: В основной функции main() создаются две переменные: line и all. Переменная line используется для хранения текущей строки, а переменная all - для хранения всех собранных строк. Изначально обе переменные пусты.
  3. Цикл считывания строк и их обработки: В основном цикле программы, пока не достигнут конец файла (EOF), происходит следующее:
    • Если длина текущей строки превышает 5 символов, то начинается обработка этой строки.
    • Строка копируется в переменную all с добавлением каждого символа в массив.
    • После обработки строки, программа возвращается к началу цикла для считывания следующей строки.
  4. Вывод результата: После окончания цикла программа выводит на экран весь собранный текст.
  5. Функции: В коде определены две функции: getline2() и copy(). Функция getline2() используется для считывания строки из стандартного ввода и возвращает количество считанных символов (или -1 при достижении конца файла). Функция copy() используется для копирования строки из одного массива в другой. Возможная проблема с кодом может быть связана с отсутствием добавления символов в массив all. Это может произойти, если длина текущей строки меньше или равна 5 символам. В этом случае, условие if (len > 5) не выполняется и цикл обработки строки не запускается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы