Консультация № 189450
20.05.2016, 18:08
0.00 руб.
0 3 1
Здравствуйте! У меня возникли сложности с таким вопросом:

Считывает последнюю строку и принимает её за самое длинное слово...

Если нужно, то в текстовом файле такой текст:

Раньше существовала легенда, что где-то
далеко живёт маленький тихий человек,
который собирает все печальные слёзы,
делает из них звёзды и вешает на небо.
И когда исчезает причина печали, звезда
падает, чтобы кто-то, там, на Земле, мог
загадать счастливое желание.


Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

/**Дан текстовый файл. Вывести первое слово текста наибольшей длины. */

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

printf("Определяет и выводится на экран первое слово наибольшей длины \n"
"Введите путь к файлу:");

char text[256];
gets(text);

FILE *my_file = fopen(text, "r");

if ( !my_file )
{
printf("Не могу открыть файл '%s'", text);
return 0;
}

char str[256];

int maxlen=0, lastlen;

while (fgets(str, sizeof(str), my_file))
{
int ls=strlen(text);
if((lastlen=ls)>maxlen)
{
strcpy(str, text);
maxlen=lastlen;
}
}

fclose(my_file);
printf("Самое длинное слово - %s ", str);
return 0;
}

Обсуждение

давно
Академик
20764
1861
20.05.2016, 18:13
общий
ну, вы же длины строк и измеряете.
И выводите str, в который перед этим строки читаете. Вот там последняя строка и оказывается.
давно
Посетитель
400314
8
20.05.2016, 18:41
общий
и как мне правильно переделать?..
давно
Посетитель
7438
7205
21.05.2016, 00:00
общий
это ответ
Здравствуйте, Usagisan!
Можно сделать, например, так:
[code h=200]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

/**Дан текстовый файл. Вывести первое слово текста наибольшей длины. */

int main()
{
char text[256];
char str[256];
char seps[] = " ,:.-?!()+=\t\n";
char *token;
int len,maxlen = 0;

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

printf("Определяет и выводится на экран первое слово наибольшей длины \n"
"Введите путь к файлу: ");

gets(text);

FILE *my_file = fopen(text, "r");

if ( !my_file )
{
printf("Не могу открыть файл '%s'", text);
return 0;
}

while (fgets(text, sizeof(text), my_file))
{
for(token=strtok(text,seps); token!=NULL; token=strtok(NULL,seps))
{
len = strlen(token);
if (len > maxlen)
{
strcpy(str, token);
maxlen = len;
}
}
}

fclose(my_file);
printf("Самое длинное слово - %s\n", str);
return 0;
}
[/code]
5
Раз за разом выручаете! Большое спасибо!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа