Скопировать из списка в файл

  • Автор темы xDyPx
  • Дата начала
Статус
Закрыто для дальнейших ответов.
X

xDyPx

#1
Вообще такая лаба у меня:
Из исходного файла скопировать во второй файл все регулярные слова, не содержащие гласных букв(которые содержат ТОЛЬКО большие английские буквы), разделив их пробелами, а в третий – все числа, подсчитав их общую сумму.

Вот текст всей программы:
=========================
[codebox]// lab4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <math.h>

struct node
{
char key; //перемнная в поле
node* next; // указатель на следующий элемент
};

//добавление в список нового элемента
void Add(node* &head, char k) //используются список head и переменная К
{
if (head==NULL) //если списка нет
{
head=new node; // создается новый элемент
head->key=k; // в новом элементе хранится знач кеу=к
head->next=NULL; //элемент указывает на конец спмска
}
else //если список есть
{
node* temp=head; //объявляется перременная
while (temp->next !=NULL) //пока ссылка на следующий элемент существует..
temp=temp->next; //переходить на следующий элемент
temp->next=new(node); //если не сущ. следующего элемента, создать его
temp=temp->next; //в переменную Темр присваивается значение следующей переменной
temp->key=k; //заполняет его
temp->next=NULL; //следующей переменной не сущечтвует
}
}

//вывод на печать список
void Print(node* head)
{
node* temp=head;
while (temp !=NULL) // пока не конец списка...
{
printf("%c",temp->key); //..выводить элемент..
temp=temp->next; //.. и переходить на следующий
}
}

void FPrint(node* head)
{
FILE *FO;
node* temp=head;
if( (fopen_s(&FO , "output1.txt", "w+" )) !NULL )
{
while (temp !=NULL) // пока не конец списка...
{
fputc(temp->key, FO);
//fwrite(temp->key,sizeof(head), 1, FO); //..выводить элемент..
temp=temp->next; //.. и переходить на следующий
}
}
}

//очистка списка
void KillList(node* &head)
{
if (head==NULL) return; //если список пуст, ничего не делать
KillList(head->next); //удаляется следующий элемент
delete head ; //удаляется на него ссылка..
head=NULL; //..и указывается ссылка на конец списка

}

int _tmain(int argc, _TCHAR* argv[])
{
node* list=NULL;
char ch;
int F;
char c=' ';
FILE *FI, *FO, *FO2;
int sum;
int summa;
int a;
//поиск регулярных слов
if( (fopen_s( &FI, "input.txt", "r" )) == 0 )
{
if( (fopen_s(&FO , "output1.txt", "w+" )) == NULL )
{
F=0;
while (!feof(FI))
{
fread( &ch,1,1,FI );
if (ch==' ')
{
F=0;
if (list!=NULL) { Print(list); fwrite(&list,sizeof(list),1,FO); cprintf(" "); KillList(list); };
}
else
{
if (!((ch=='B') || (ch=='C') || (ch=='D') || (ch=='F') || (ch=='G') || (ch=='H') || (ch=='K') || (ch=='L') || (ch=='M') || (ch=='N') || (ch=='P') || (ch=='Q') || (ch=='R') || (ch=='S') || (ch=='T') || (ch=='V') || (ch=='W') || (ch=='X') || (ch=='Y') || (ch=='Z')))
{KillList(list); F=1;}
else
if (F==0) Add(list, ch);

};
}
} else printf("error output file\n\r");
}
else printf("error input file\n\r");
//конец поиска

cout<<'\n';

//ищет числа и считает их сумму
list=NULL;
sum=0;
summa=0;
if( (fopen_s( &FI, "input.txt", "r" )) == 0 )
{
if( (fopen_s(&FO2 , "output2.txt", "w+" )) == NULL )
{
F=0;
while (!feof(FI))
{
fread( &ch,1,1,FI );
a=ch;
if (ch==' ')
{
F=0;
if (list!=NULL) { Print(list); summa=summa+sum; fwrite(&list,5,5,FO2); cprintf(" "); KillList(list); };
}
else
{
if (!((ch>='0') && (ch<='9')))
{KillList(list); sum=0; F=1;}
else
if (F==0) {Add(list, ch); sum=sum+a;}

};
}
} else printf("error output file\n\r");
//конец поиска
}
else printf("error input file\n\r");
cout<<'\n';
printf("close %i files",_fcloseall());
cout<<"\nsumma="<<summa;

getch();
return 0;
}[/codebox]



=========================
Три файла хранятся в подпапке с названием, как у самого проекта. Я пользуюся Visual Studio 9.

У меня возникла сложность в копировании из списка этих самых регулярных слов и чисел в файлы, там копируется, но какая-то фигня. И когда подсчитывается сумма чисел в первом файле, то считается сумма номеров в аски таблице, а не самого числа. Помогите, очень надо!
 
Статус
Закрыто для дальнейших ответов.