IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Файлы, Язык Си, помогите найти ошибки
Neon6868
сообщение 19.05.2007 14:29
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Задание: Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введённое с клавиатуры слово.

Вот программа, но когда я её запускаю, то она зависает. И я сделал, чтобы число выводилось только в конце всего текста, а как можно сделать, чтобы оно считалось и выводилось после каждого предложения?

# include <stdio.h>
# include <string.h>
# define name "D:\\text.txt"
# define znak ".?!"
void main()
  {
  FILE *f;
  int x,y,i;
  if (!(f=fopen(name,"rt"))) printf("\nOshibka");
  fseek(f,0,SEEK_SET);
  long len=ftell(f);
  char *s=new char[len+1];
  printf("\nVvedite slovo\n");
  char *ch=new char[255];
  scanf("%s",ch);
	i=0;
	while (i<strlen(s))
	  {
	  while ((i<strlen(s)) && (!(strchr(znak,s[i]))))
	  {
	  i++;
	  printf("\n%c",s[i]);
	  if (strstr(s,ch)) x++;
	  }
	  }
	fclose(f);
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Neon6868
сообщение 19.05.2007 16:31
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Я вот переделал прогу, но она всё равно виснет! Подскажите плз из-за чего?

# include <stdio.h>
# include <string.h>
#include <ctype.h>
#include <fstream.h>
void main()
  {const int len=255;
  char word[len],line[len];
  int x,y,i;
  printf("\nVvedite slovo\n");
  scanf("%s",&word);
  int l_word=strlen(word);
  ifstream fin("D:\\text.txt", ios::in | ios::nocreate);
  if (!fin) printf("\nOshibka");
  int count=0;
  while (fin.getline(line,len))
  {
  char *p=line;
  while (p=strstr(p,word))
  {
  char *c=p;
  p+=l_word;
  if (c!=line) if (!ispunct(*(c-1)) && ! isspace(*(c-1))) continue;
  if (ispunct(*p) || isspace(*p) || (*p=='\0')) count++;
  }
  }
  printf("%d",count);
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2007 16:34
Сообщение #3


Гость






Я не понял, у тебя С или С++? Вроде пользуешься fstream, но в то же время printf тоже присутствует... unsure.gif
 К началу страницы 
+ Ответить 
Neon6868
сообщение 20.05.2007 11:57
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.05.2007 17:34) *

Я не понял, у тебя С или С++? Вроде пользуешься fstream, но в то же время printf тоже присутствует... unsure.gif


Вообще программу надо сделать на СИ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2007 13:14
Сообщение #5


Гость






Ну, если на С, тогда вот так попробуй:

#include <stdio.h>
#include <string.h>

#define fname "text700.txt"
#define STR_MAX  1024
#define BUFF_LEN 80
#define FINAL ".!?"

int main() {

  char s[STR_MAX], buf[BUFF_LEN + 1], *p, *pp;
  char word[10];

  int len, n, counter;
  FILE *f;

  if((f = fopen(fname, "rt")) == NULL) {
    printf("Error: cannot open file %s", fname);
    return 1;
  }

  printf("enter word: ");
  gets(word);

  s[0] = '\0';
  while(!feof(f)) {
    fgets(buf, 80, f);
    if((len = strlen(buf)) > 0) buf[len - 1] = (char)32;
    strcat(s, buf);
  }
  fclose(f);

  counter = 0;
  p = strtok(s, FINAL);
  while(p) {

    pp = p;
    n = 0;
    do {
      pp = strstr(pp, word);
      if(pp) { n += 1; ++pp; }
    } while(pp);
    printf("sentence #%d: %d word(s)\n", ++counter, n);

    p = strtok(NULL, FINAL);
  }

  return 0;

}

 К началу страницы 
+ Ответить 
Neon6868
сообщение 26.05.2007 12:15
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Спасибо за помощь! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 17.07.2025 19:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"