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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 16:47   #1
GreeNYA
 
Регистрация: 18.04.2011
Сообщений: 5
По умолчанию Файловые операции на C. Подсчет кол-ва слов в файле

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

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

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

Вот код:

Код:
#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 - входной файл
*/
GreeNYA вне форума Ответить с цитированием
Старый 22.12.2013, 18:28   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Код:
  fprintf(flog,"В файле %s содержится %n строк\n", argv[1],CountW);
  printf("В файле %s содержится %n строк\n", argv[1],CountW);
fprintf ref

Цитата:
n - Nothing printed.
The corresponding argument must be a pointer to a signed int.
The number of characters written so far is stored in the pointed location.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 22.12.2013 в 18:30.
alexander13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pascal, программа на подсчет в текстовом файле количества слов, состоящих из четырех букв Катя Миронова Помощь студентам 3 19.03.2013 19:23
Написать программу на си под линукс которая осуществляет подсчет количества слов в текстовом файле и записывает полученное число в tarasman11 Общие вопросы C/C++ 11 19.11.2012 21:41
Подсчет кол-ва слов Dima DDM Общие вопросы Delphi 1 25.12.2011 22:20
С++Робота со строками и файловые операции((Где же ошибка??? Scarletred Помощь студентам 0 24.05.2010 03:58
Файловые операции _GT_ Общие вопросы C/C++ 1 08.05.2010 20:48