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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2011, 13:13   #1
novak3
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 33
По умолчанию Копирование числа из одного документа в другой

Написал следующую прогу. Суть ее в том, чтоб из документа input.txt копировалось число в документ output1.txt. Применил однонаправленный линейный список.

Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <malloc.h>
 
int n;
struct Node
{
int word[40];
 
struct Node *next;                                         //ссылка на след. узел
struct Node **ptr;                                        //указатель 
};
typedef struct Node*PNode;                     //тип данных:указатель на узел
PNode Head=NULL;
struct Node **ptr = &Head;                      //инициирование указателя 
 
PNode CreateNode(int NewWord[])               //СОЗДАНИЕ ЭЛ-ТА СПИСКА
{PNode NewNode=(PNode)malloc(sizeof(struct Node));   //указатель на новый узел
memcpy(NewNode->word,NewWord, (sizeof(NewWord) / sizeof(*NewWord)) * sizeof(*NewWord));       //записать слово(замена NewWord на word)
NewNode->next=NULL;                                      //следующего узла нет
return NewNode;}                                      //рез-т функции-адрес узла
 
void AddFirst(PNode ptr,PNode NewNode)           //ДОБАВЛЕНИЕ УЗЛА В НАЧАЛО СПИСКА
{NewNode->next=Head;
Head=NewNode;}
 
void AddLast(PNode ptr,PNode NewNode)           //ДОБАВЛЕНИЕ УЗЛА В КОНЕЦ СПИСКА
{PNode q=Head;
if (Head==NULL)                                                     //если список пуст
{AddFirst(Head,NewNode);                        //вставляем первый элемент
return;}
}
 
int main()
{
 PNode ptr = NULL, p;
 FILE *in,*out1;
int word[40],word2[40];
 
printf("Vvod:\n");
scanf("%d",&word2[0]);                 //"команда" для выполнения действия
 
in=fopen("input.txt","r");                                         //открытие файла 1
 
 while (1)                                    //в n хранится значение, к-е вернула ф-я fscanf.Если это число меньше 1(чтение прошло неудачно или закончились данные в файле),то происходит выход из цикла.
 {
n=fscanf(in,"%d",word);                          //чтение данных из файла 1
if (n<=0)
break;
p=CreateNode(word);                               //создание нового узла
AddLast(Head,p);                                                    //добавление
}
fclose(in);                                                               //закрытие файла1
 
out1=fopen("output1.txt","w");                               //открытие файла2
                                 //ВЫВОД ДАННЫХ В ФАЙЛ №2(ПО ЗАПРОСУ №1)
p=Head;                                              //присвоение узлу р "головы"
fprintf(out1,"%d",p->word);
fclose(out1);                                                      //закрытие файла2
 
return 0;                                                                              
}

Проблема в том, что при копировании числа из документа input.txt в документ output1.txt, в последнем появляется абракадабра. Пожалуйста, подскажите как исправить ошибку.
novak3 вне форума Ответить с цитированием
Старый 04.09.2011, 13:14   #2
novak3
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 33
По умолчанию

Кстати, эту прогу я переделал с другой, которая делала то же самое, но только с символьными значениями(словами) и она стопроцентно работала.
Вот код той проги, если нужно
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <malloc.h>
 
int n;
struct Node
{
char word[40];
 
struct Node *next;                                         //ссылка на след. узел
struct Node **ptr;                                        //указатель (вместо ссылки "&Head")
};
typedef struct Node*PNode;                      //тип данных:указатель на узел
PNode Head=NULL;
struct Node **ptr = &Head;                      //инициирование указателя (вместо ссылки "&Head")
 
PNode CreateNode(char NewWord[])                                            //СОЗДАНИЕ ЭЛ-ТА СПИСКА
{PNode NewNode=(PNode)malloc(sizeof(struct Node));         //указатель на новый узел
strcpy(NewNode->word,NewWord);                      //записать слово(замена NewWord на word)
NewNode->next=NULL;                                                                //следующего узла нет
return NewNode;}                                                                         //рез-т функции-адрес узла
 
void AddFirst(PNode ptr,PNode NewNode)               //ДОБАВЛЕНИЕ УЗЛА В НАЧАЛО СПИСКА
{NewNode->next=Head;
Head=NewNode;}
 
void AddLast(PNode ptr,PNode NewNode)           //ДОБАВЛЕНИЕ УЗЛА В КОНЕЦ СПИСКА
{PNode q=Head;
if (Head==NULL)                                                     //если список пуст
{AddFirst(Head,NewNode);                                    //вставляем первый элемент
return;}
}
 
int main()
{
 PNode ptr = NULL, p;
 FILE *in,*out1;
char word[40],word2[40];
 
printf("Vvod:\n");
scanf("%s",&word2[0]);                                                //ввод слова на запрос №1(компилятор предупреждал: поэтому ввел [0])
 
in=fopen("input.txt","r");                                         //открытие файла 1
 
 while (1)                                                                //в n хранится значение, к-е вернула ф-я fscanf.Если это число меньше 1(чтение прошло неудачно или закончились данные в файле),то происходит выход из цикла.
 {
n=fscanf(in,"%s",word);                                        //чтение данных из файла 1
if (n<=0)
break;
p=CreateNode(word);                                             //создание нового узла
AddLast(Head,p);                                                    //добавление
}
fclose(in);                                                               //закрытие файла1
 
out1=fopen("output1.txt","w");                               //открытие файла2
                                 //ВЫВОД ДАННЫХ В ФАЙЛ №2(ПО ЗАПРОСУ №1)
p=Head;                                                       //присвоение узлу р "головы"
fprintf(out1,"%s",p->word);
fclose(out1);                                                           //закрытие файла2
 
return 0;                                                                                
}
novak3 вне форума Ответить с цитированием
Старый 04.09.2011, 14:43   #3
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

Так в чем суть задачи не понятно? и что не получается? и нафига вообще список?
Kukurudza вне форума Ответить с цитированием
Старый 04.09.2011, 20:05   #4
novak3
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 33
По умолчанию

В целом передо мной стоит более сложная задача которую нужно решить используя линейный список. Я минимизировал код для лучшего восприятия.
Вся проблема в том, что из документа input.txt не копируется число в документ output1.txt.
novak3 вне форума Ответить с цитированием
Старый 05.09.2011, 05:36   #5
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

во-первых, vector из stl не подходит? по-моему ваш список кривой, по крайней мере по шагам теряется хвост.
во-вторых, вместо scanf и printf используйте только cout cin из iostream. для файлов из fstream. вот вкратце:
#include <iostream>
#include <fstream>
using namespace std;

void main ()
{
int k;
cout << "Введите число = ";
cin >> k;

ifstream in ("input.txt");
ofstream out ("output1.txt");

in >> k;
out << k;
return;
}

и последнее,
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <malloc.h>

int n;
struct Node
{
int word[40];
struct Node *next; //ссылка на след. узел
struct Node **ptr; //указатель
};

typedef struct Node*PNode; //тип данных:указатель на узел
PNode Head=NULL;
struct Node **ptr = &Head; //инициирование указателя

PNode CreateNode(int NewWord[]) //СОЗДАНИЕ ЭЛ-ТА СПИСКА
{
PNode NewNode=(PNode)malloc(sizeof(struct Node)); //указатель на новый узел
memcpy(NewNode->word,NewWord, (sizeof(NewWord) / sizeof(*NewWord)) * sizeof(*NewWord)); //записать слово(замена NewWord на word)
NewNode->next=NULL; //следующего узла нет
return NewNode;
}; //рез-т функции-адрес узла

void AddFirst(PNode ptr,PNode NewNode) //ДОБАВЛЕНИЕ УЗЛА В НАЧАЛО СПИСКА
{
NewNode->next=Head;
Head=NewNode;
};

void AddLast(PNode ptr,PNode NewNode) //ДОБАВЛЕНИЕ УЗЛА В КОНЕЦ СПИСКА
{
PNode q=Head;
if (Head==NULL) //если список пуст
{
AddFirst(Head,NewNode); //вставляем первый элемент
return;
};
};

int main()
{
PNode ptr = NULL, p;
FILE *in,*out1;
int word[40],word2[40];

printf("Vvod:\n");
scanf("%d",&word2[0]); //"команда" для выполнения действия

in = fopen("input.txt","r"); //открытие файла 1

while (1) //в n хранится значение, к-е вернула ф-я fscanf.Если это число меньше 1(чтение прошло неудачно или закончились данные в файле),то происходит выход из цикла.
{
n = fscanf(in, "%d", word); //чтение данных из файла 1
if (n<=0)
break;
p=CreateNode(word); //создание нового узла
AddLast(Head,p); //добавление
}
fclose(in); //закрытие файла1

out1=fopen("output1.txt","w"); //открытие файла2
//ВЫВОД ДАННЫХ В ФАЙЛ №2(ПО ЗАПРОСУ №1)
p = Head; //присвоение узлу р "головы"
fprintf(out1,"%d",p->word[0]);
fclose(out1); //закрытие файла2

return 0;
}

ошибка была тут fprintf(out1,"%d",p->word[0]);
а у вас fprintf(out1,"%d",p->word);
Kukurudza вне форума Ответить с цитированием
Старый 07.09.2011, 22:55   #6
novak3
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 33
По умолчанию

Вместо
Код:
fprintf(out1,"%d",p->word);
надо было
Код:
fprintf(out1,"%d",p->word[0]);
Вот эта именно та ошибка которую я так долго искал.

Большое спасибо за помощь,Kukurudza, наконец-то я доделал курсовую!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!

Последний раз редактировалось novak3; 07.09.2011 в 22:57.
novak3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание скрипта для копирования данных из одного документа в другой artem_b Microsoft Office Excel 5 20.02.2012 18:02
Копирование с одного листа на другой + вычисления rus65 Microsoft Office Excel 4 25.07.2011 14:34
как скопировать лист оз одного документа в другой trunx Microsoft Office Word 9 14.06.2010 02:58
передача данных ячейки из одного документа в другой. iamaxl Microsoft Office Excel 3 04.07.2009 07:08
Копирование информации из одного листа на другой Юрийpirs2008 Microsoft Office Excel 6 24.03.2009 07:59