1

задача: дан файл, содержащий некоторый текст. В новый файл записать самую длинную фразу и фразу с наибольшим количеством слов. Код:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define STRS 1024
#define SPACE ' '

void theLong(char* str) { FILE* f;/файл/ int count = 0, max = 0, i = 0, j = 0; char word[STRS] = { '\0' }; f = fopen("new.txt", "w"); if (!f) { printf("ERROR!!!\n"); exit(1); } fclose(f); for (i = j; str[i] != '\0'; i++) { if (str[i] == SPACE) continue; count = 0; for (j = i; str[j] != SPACE && str[j] != '\0'; j++) { count++; } if (max < count) max = count; i = j; } f = fopen("new.txt", "a"); printf("ERROR!!!\n"); exit(1); } j = 0; for (i = j; str[i] != '\0'; i++) { if (str[i] == SPACE) continue; count = 0; for (j = i; str[j] != SPACE && str[j] != '\0'; j++) { word[count] = str[j]; count++; } if (max == count) fprintf(f, "%s ", word); for (i = 0; word[i] != '\0'; i++) word[i] = '\0'; i = j; } fclose(f); }

int main() { FILE* f; char str[STRS] = { "\0" }; f = fopen("lab7.txt", "r"); if (!f) { printf("ERROR!!!\n"); exit(1); } fgets(str, STRS, f); fclose(f); theLong(str); return 0; }

Проблема заключается в том, что программа читает только первую строку файлов, игнорируя что находится на следующих

  • Может первый fclose лишний? – avp Jan 01 '23 at 20:39
  • Но вы же читаете только одну строку! fgets(str, STRS, f); fclose(f); Что же вы хотите?... Все, как вы попросили. – Harry Jan 01 '23 at 21:06
  • @Harry думал он так или иначе будет проходится по всем строкам, но получилось иначе. Как тогда переходить на след. строку файла? –  Jan 01 '23 at 21:56
  • Вторым таким же вызовом. Например, в цикле. – Harry Jan 01 '23 at 22:15
  • @harry типо через while(f!=eof)? –  Jan 01 '23 at 22:16
  • А вот так не стоит — см. https://ru.stackoverflow.com/questions/833980/%d0%9f%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%ba%d0%be%d0%bd%d1%86%d0%b0-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0 – Harry Jan 01 '23 at 22:18
  • @Harry добавил в тело мейна после проверки цикл while((fread(str,STRS,1,f)==1) theLong(str), но ничего не происходит, компилируется без ошибок. Что-то сделано не так? как понял из интернета :1 параметр - буфер, в который будут прочитаны данные из файла, поэтому подумал, что могу использовать уже созданный массив str –  Jan 01 '23 at 22:38
  • Вы хотите считывать весь файл в один большой массив? Тогда это немного иной вопрос, чем "читает только первую строку". – Harry Jan 02 '23 at 07:38

0 Answers0