Почему не добавляются значения в массив - 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)
не выполняется и цикл обработки строки не запускается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д