Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 16:57   #1
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
Печаль Cи++, Текстовый файл.

Добрый вечер)) Не могли бы Вы мне помочь с такой задачкой: дан текстовый файл, найти номер самой длинной строки. Я вот не понимаю немного условие..файл нужно предварительно создать..или создать его в программе..и можно ли найти номер самой короткой строки любого текстового файла..введя его имя с клавиатуры. Ну вот пытаюсь создать файл..а как найти номер самой длинной строки не понимаю. Знаю, что через strlen,но как организовать цикл не пойму...помогите пожалйста((
Код:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
      char m[80];
      int c,k;
      FILE *f;
      puts("\n enter string:");
      gets(m);
      f=fopen("text.txt","w");
      if (f==NULL)
      {
      fprintf(stderr,"Error opening file for write");
      exit(1);
      }
      if (fputs(m,f)==EOF)
      {
      fprintf(stderr,"Error writening file");
      exit(1);
      }
      fclose(f);
      f=fopen("text.txt","r") ;
      if (f==NULL)
      {
      fprintf(stderr,"Error opening file for read");
      exit(1);
      }
      system("PAUSE");
      return 0;
}
Diamond2107 вне форума Ответить с цитированием
Старый 07.12.2009, 17:56   #2
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
#define MAXLINE 1024
 
int main()
{
    FILE *fp;
    char fname[64], s[4096];
    long i, lineno, maxline;
 
    printf("vvedite imay faila: ");
    scanf("%63s", fname);
 
    if( (fp = fopen(fname, "r")) == NULL) {
        fprintf(stderr, "fopen: %s: %s\n", fname, strerror(errno));
        return 1;
    }
 
    i = lineno = maxline = 0;
    while(fgets(s, sizeof(s), fp) != NULL) {
        i++;
        if(strlen(s) > maxline) {
            maxline = strlen(s);
            lineno = i;
        }
    }
 
    printf("nomer stroki #%ld (%ld).\n", lineno, maxline);
    fclose(fp);
     getchar();
    return 0;
}
вот, что сделала..но все равно не работает..посмотрите пожалуста, что не так?((..

Последний раз редактировалось Diamond2107; 07.12.2009 в 18:34.
Diamond2107 вне форума Ответить с цитированием
Старый 07.12.2009, 18:32   #3
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Компилирует..но не выводит результат..посмотрите пожалуйста((
Diamond2107 вне форума Ответить с цитированием
Старый 07.12.2009, 19:37   #4
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Я вот ввожу имя файла..нажимаю на ентер..и окно закрывается((
Diamond2107 вне форума Ответить с цитированием
Старый 07.12.2009, 20:17   #5
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

окно закрывается где?

в скомпилированной программе? запускайте экзешник через командную строку
в компиляторе? консольные компиляторы могут вывести экран закрывшейся программы нажатием клавиш Alt+F5

также есть хороший вариант - использование функции библиотеки conio.h - getch(). Она ждет нажатия клавиши, когда нажатие произошло, выполняется дальнейший код программы (в данном случае выход)


добавлено: не заметил getchar(), sorry

Последний раз редактировалось Namolem; 07.12.2009 в 21:11.
Namolem вне форума Ответить с цитированием
Старый 07.12.2009, 20:28   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

почему не работает с scanf, fscanf, fgets понятия не имею...
остается только gets, с ней как раз работает. Но эта функция не следит за размером введенной строки, так что желательно еще
проверять не ввел ли пользователь строку размером больше чем размер буфера
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
#define MAXLINE 1024
 
int main()
{
    FILE *fp;
    char fname[50],s[4096];
    long i, lineno, maxline;    
    printf("vvedite imay faila: ");
    gets(fname);
    if( (fp = fopen(fname, "r")) == NULL) {
        fprintf(stderr, "fopen: %s: %s\n", fname, strerror(errno));
        //return 1;
            printf("qq2");         
    }  
    i = lineno = maxline = 0;
    while(fgets(s, 4096, fp) != NULL) {
        i++;
        if(strlen(s) > maxline) {
            maxline = strlen(s);
            lineno = i;
        }
    }
    free(fname);
    printf("nomer stroki #%ld (%ld).\n", lineno, maxline);
    fclose(fp);
     getchar();
    return 0;
}

Последний раз редактировалось NiCola999; 07.12.2009 в 20:33.
NiCola999 вне форума Ответить с цитированием
Старый 07.12.2009, 21:30   #7
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Да..с gets как раз заработало))спасибо Вам большое))странно почему так не работало..
А не могли бы Вы подсказать как напечатать первый символ каждой строки...а то с длинами разобралась..а это чет не пойму(
Diamond2107 вне форума Ответить с цитированием
Старый 07.12.2009, 22:09   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

могу =)
Код:
while(fgets(s, 4096, fp) != NULL) {
        i++;
        printf("%c\n", s[0]);
        if(strlen(s) > maxline) {
            maxline = strlen(s);
            lineno = i;
        }
    }
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Текстовый файл _Smoke_ Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 13:25
текстовый файл Var17 Общие вопросы Delphi 1 22.12.2007 02:20
Текстовый файл в текстовый массив Kimimaru Общие вопросы C/C++ 1 02.12.2007 11:55