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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 23:47   #1
АлександрЕ
Новичок
Джуниор
 
Регистрация: 08.06.2011
Сообщений: 2
По умолчанию Си списки , ошибка сегминтирования

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

struct item
{
char *world;
int count;
struct item *next;
};

struct item *head=NULL;
struct item *p=NULL;
struct item *q=NULL;

char S[50];
char k;
int d=1;

void chtenya( FILE *f)//функция для чтения слова
{
printf ("chtenya\n");
int j=0;

while (j<=50)
{

S[j]=0;
j++;
}

j=0;

while ((k<='A' || k>='Z')&&(k<='a' || k>='z')&&(d==1))
{
d=fscanf(f,"%c",k);
printf("opa\n");

}
//проверка вдруг полсе очередного слова встретися что то типо такого anyting"- and he ...
while (((k>='A' && t<='Z')||(k>='a'&& k<='z'))&& (d==1))
{
printf ("%c\n",k);
S[j]=k;
d=fscanf(f,"%c",&k);

j++;
}
}

int main ()
{
int flag=0;
int i=0;
FILE *f=fopen("slova.txt","r");

if (f==NULL)
{
printf ("file not open\n");
return 0;
}

fscanf (f,"%c",&k); // для простоты считаю что первый символ текста это буква

S[i]=k;

i++;
while (flag!=1)
{


fscanf (f,"%c",&k);

if ((k<='A' || k>='Z')&&(k<='a' || k>='z'))
flag=1;
else
S[i]=k;

i++;


}

head= malloc (sizeof(struct item));
head->world=malloc (strlen(S)+1);
strcpy(head->world,S);
head->count=1;
head->next=NULL;

while (d==1)
{
printf("while\n");
chtenya(f);

for (p=head;p;p=p->next)
{
if (strcmp(p->world,S)==0)
{
p->count++;
break;
}

}


if (!p)
{
q=malloc(sizeof(struct item));
q->next=head;
strcpy(q->world,S);
q->count=1;
head=q;
}

}

for (p=head;p;p=p->next)
{
printf ("%s-%d\n",p->world;p->count);
}

fclose (f);
}


Программа должна открывать фаил считать сколько каждого слова в тексте, выдаёт ошибку сегментирования но не пойму почему
АлександрЕ вне форума Ответить с цитированием
Старый 09.06.2011, 00:08   #2
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Код:
while ((k<='A' || k>='Z')&&(k<='a' || k>='z')&&(d==1))
{
d=fscanf(f,"%c",k); <= амперсанд пропущен ??
printf("opa\n");

}
tools вне форума Ответить с цитированием
Старый 09.06.2011, 00:25   #3
АлександрЕ
Новичок
Джуниор
 
Регистрация: 08.06.2011
Сообщений: 2
По умолчанию

Всё равно ошибка сегминтирования
АлександрЕ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки. Pavel_4a-4anax Помощь студентам 0 01.06.2011 15:38
Где ошибка в программе? Списки. Стеки. Паскаль AHD Помощь студентам 0 10.12.2010 14:25
списки Astro4ka Паскаль, Turbo Pascal, PascalABC.NET 0 25.04.2010 17:53
Списки Bremlin Microsoft Office Excel 10 04.11.2008 15:13