Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файловые операции на C. Подсчет слов в файле 
:(
    Опции темы
tonygreen
  Дата 22.12.2013, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.12.2013

Репутация: нет
Всего: нет



Доброго времени суток!

Подскажите, пожалуйста, в чем может быть проблема.

Программа должна работать с аргументом командой строки. И брать оттуда имя файла для открытия и последующей работы с ним, а именно - подсчет кол-ва слов в файле.

Вот код:
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

int main (int argc, char* argv[])
{
  char ch;
  int CountW=0;
  FILE *fin, *flog;
  
  if (argc<2)
  {
    puts(" ___________________________________ ");  
    puts("|                   ОШИБКА!                        |"); 
    puts("|--------------------------------------- |");
    puts("| Используйте ./05 filename                   |");
    puts("| где filename - имя входного файла.      |");
    puts("|___________________________________|");
  }
  if ((flog=fopen("05.log","a"))==NULL)
  {
    puts("Ошибка открытия протокола");
    timestamp(flog);
    fprintf(flog,"Ошибка открытия протокола\n ");
    fclose(flog);
  }
  fprintf(flog,"\n------------------------\n");
  timestamp(flog);
  fprintf(flog,"Начало работы\n");
  if ((fin=fopen(argv[1],"r"))==NULL)
  {
    puts("Ошибка открытия входного файла");
    timestamp(flog);
    fprintf(flog,"Ошибка открытия входного файла\n");
    fprintf(flog,"Конец работы\n");
    fclose(flog);
  }
  timestamp(flog);
  fprintf(flog,"Открыт файл %s\n",argv[1]);
  while(!feof(fin))
  {
    ch=fgetc(fin);
    if(ch=='\n') CountW++;
    putchar(ch);    
  }
  timestamp(flog);
  fprintf(flog,"В файле %s содержится %n строк\n", argv[1],CountW);
  printf("В файле %s содержится %n строк\n", argv[1],CountW);
  fclose(fin);
  timestamp(flog);
  fprintf(flog,"Файл %s закрыт\n",argv[1]);
  fprintf(flog,"Конец работы\n");
  fclose(flog);
}

При запуске в терминале через ./05 work.txt выводит все содержимое входного файла и "ошибка сегментирования". Как быть?
/*
05 - имя самой программы
work.txt - входной файл
*/
PM MAIL   Вверх
disputant
Дата 22.12.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Заменить %n на что-то другое не хотите?

%n    Аргумент, соответствующий этому спецификатору, должен быть указателем на целочисленную переменную. Спецификатор позволяет сохранить в этой переменной количество записанных символов (записанных до того места, в котором находится код %n) 

Разве у вас указатель?...

Это сообщение отредактировал(а) disputant - 22.12.2013, 16:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.