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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 22:04   #1
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию Работа с файлами. fgetc().

Что-то не работает моя программа. Гляньте плз где ошибка. И да буду рад любым замечаниям по коду т.к. изучаю С++ сам. Пишу в Visual C++ 6.

Код:
/*2. Дaн тeкcтoвый фaйл. Прoaнaлизирoвaв в прoгрaммe сoдeржимoe фaйлa, 
выбeритe из нeгo имeнa (нaчинaются с прoписнoй бyквы и нaхoдятся в 
сeрeдинe прeдлoжeния) и зaнeситe в oчeрeдь. Bывeдитe сoдeржимoe и 
кoличeствo элeмeнтoв oбрaзoвaннoй oчeрeди нa экрaн. */


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


typedef struct queue{
	char name[30];
	struct queue *next;
} Queue;

Queue *tail = NULL, *head = NULL;
char c;
int j = 0;
FILE *myfile;

void AddToQ(void);
void Display(void);

void main()
{	
	myfile = fopen("file.tfl","w+");
	fputs("Zavtra Vasya i Katya poydut v kino c Petey.\n",myfile);
	fclose(myfile);
	myfile = fopen("file.tfl","r");
	c = fgetc(myfile);
	c = fgetc(myfile);
	c = fgetc(myfile); /* начинаю с 3го символа т.к. имена в середине */
	while ( c != EOF)
	{ 
		if (isupper(c)) AddToQ();
		c = fgetc(myfile);
	}
Display();
getch();
}

void AddToQ()
{
	Queue *p;
	p = new(Queue);
	j = 0;
	while  ((c != ' ') || ( c != ',') || (c !='.')||(c != EOF))
	{
		p->name[j] = c;
		c = fgetc(myfile);
		j++;
	}
	p->next = NULL;
	if (head->next = NULL) head=p;
	else tail->next = p;
	tail = p;
}

void Display()
{
	Queue *p = head;
	int i = 0;
	while (p->next != NULL)
	{
		i++;
		printf("%i. %s.",i,p->name);
		p=p->next;
	}
	printf("\nVsego imen: %d",i);
}

Последний раз редактировалось Airou; 07.06.2009 в 22:26.
Airou вне форума Ответить с цитированием
Старый 08.06.2009, 20:55   #2
Airou
Форумчанин
 
Регистрация: 09.04.2008
Сообщений: 151
По умолчанию

Ай вобщем сам все поправил

Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>


typedef struct queue{
	char name[20];
	struct queue *next;
} Queue;

Queue *tail = NULL, *head = NULL;

void AddToQ(char str[20]);
void Display(void);

void main()
{
	char c, *str;
	int i = 0;
	FILE *myfile;

	myfile = fopen("file.tfl","w+");
	fputs("Zavtra Vasyiliy i Katya poydut v kino c Petey.\n",myfile);
	fclose(myfile);
	myfile = fopen("file.tfl","r");
	c = fgetc(myfile);
	c = fgetc(myfile);
	c = fgetc(myfile);
	while ( c != EOF)
	{ 
		if (isupper(c))
		{
			i = 0;
			str = (char*)calloc(20,sizeof(char));  /*выделяет память под массив заполняя его нулями(делает чистую строку))*/

			while (isalpha(c))
			{
				str[i] = c;
				c = fgetc(myfile);
				i++;
			}

			AddToQ(str);
			free(str);
		}
		c = fgetc(myfile);
	}
Display();
getch();
}

void AddToQ(char str[20])
{
	Queue *p;
	p = new(Queue);
	strcpy(p->name,str);
	p->next = NULL;
	if (head == NULL) head = p;
	else tail->next = p;
	tail = p;
}

void Display()
{
	Queue *p = head;
	int i = 0;

	printf("  Spisok imen naydenyh v fayle:\n");
	while (p != NULL)
	{
		i++;
		printf("  %i. %s\n",i,p->name);
		p=p->next;
	}

	printf("\n  Vsego imen : %d",i);
}
Airou вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ю Работа с файлами maloy-rom Помощь студентам 1 03.06.2009 16:18
Работа с файлами Cpluser Общие вопросы C/C++ 2 16.02.2009 23:22
Работа с файлами МартинИ Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2008 21:36
Работа с файлами Yar Помощь студентам 2 02.06.2008 08:03