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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Файлы, Язык Си, помогите найти ошибки
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


Пионер
**

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

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


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

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


Вообще программу надо сделать на СИ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

}

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


Пионер
**

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

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


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

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

 





- Текстовая версия 24.10.2020 7:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name