Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция записи. 
V
    Опции темы
dizel003
Дата 11.2.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Задача такая нужно чтобы программа-
1) считывала из файла последнее значение... (если его нету то продолжала выполнение без него)
2) вводить с клавиатуры значения и выполнять какое нибудь действие...


вот пример того что нужно но я кое что не могу написать!!!

Код

void write(T t) //Описание функции записи
 {
     ofstream fout("base.txt",ios::app);
 int metka=0;
 do
 {

/*fin>>t.a;//А КАК НАПИСАТЬ СДЕСЬ ФУНКЦИЮ Я НЕ ЗНАЮ(*/

 cout<<Rus("ВВедите первое значение")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе значение")<<endl;
 cin>>t.b;
 t.c=t.b+t.a;
  fout<<"\n"<<t.a;
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 fout.close();
 fout.clear();
 }


Перед вводом данных в данном случае переменных нужно сделать так чтобы если в документе есть какие нибудь записи то он считывал бы последнию запись и придовал значение t.a тому числу... тоесть если есть значение в блокноте то t.a не нужно вводить а ей присвоилось значение из блокнота!!!
ЗАРАНЕЕ СПАСИБО!

Это сообщение отредактировал(а) dizel003 - 11.2.2008, 21:20
PM MAIL   Вверх
JackYF
Дата 11.2.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



dizel003, если бы я понял, что надо сделать, я бы, может, и подсказал.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizel003
Дата 12.2.2008, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(JackYF @ 11.2.2008,  23:20)
dizel003, если бы я понял, что надо сделать, я бы, может, и подсказал.

мне нужно написать функцию чтобы программа считывала последнюю надпись из файла! Просто как её написать... Остальное сам сделаю
PM MAIL   Вверх
EnergoHokum
Дата 12.2.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Код

fpos_t find_begin_of_string(void)
{/* Поиск начала строки, на которой установлен курсор */
    fpos_t cur_pos;
    int sym;
    if(fgetpos(file,&cur_pos) != 0)
        return 0;
    while((sym=fgetc(file)) != 0x0A)
    {
        if(sym == EOF)
        {    cur_pos=0; fsetpos(file,&cur_pos); return 0; }
        if(--cur_pos < 1)
        {    cur_pos=0; fsetpos(file,&cur_pos); return 0; }
        fsetpos(file,&cur_pos);
    }
    fsetpos(file,&(cur_pos-=2));/* Курсор -- на конец предыдущей строки */
    return (cur_pos+=3);/* Возврат позиции первого символа заданной строки */
}


Код из работающего проекта, всё компилируется и работает, как задумано.
PM MAIL ICQ   Вверх
dizel003
Дата 12.2.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(EnergoHokum @ 12.2.2008,  10:25)
Код

fpos_t find_begin_of_string(void)
{/* Поиск начала строки, на которой установлен курсор */
    fpos_t cur_pos;
    int sym;
    if(fgetpos(file,&cur_pos) != 0)
        return 0;
    while((sym=fgetc(file)) != 0x0A)
    {
        if(sym == EOF)
        {    cur_pos=0; fsetpos(file,&cur_pos); return 0; }
        if(--cur_pos < 1)
        {    cur_pos=0; fsetpos(file,&cur_pos); return 0; }
        fsetpos(file,&cur_pos);
    }
    fsetpos(file,&(cur_pos-=2));/* Курсор -- на конец предыдущей строки */
    return (cur_pos+=3);/* Возврат позиции первого символа заданной строки */
}


Код из работающего проекта, всё компилируется и работает, как задумано.

слушай(те) не как не пойму как это подставить в мою запись! 
PM MAIL   Вверх
Optimus
Дата 12.2.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: нет
Всего: 14



если я правильно понял, надо считать последний символ из файла

например в файле base.txt находится: 27349, значит мы должны получить '9'
Код

  ifstream in("base.txt");

  in.seekg(-1, ios::end);

  char num;
  in.get(num);

  cout << endl << endl << num;

  in.close();

--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
dizel003
Дата 12.2.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(Optimus @ 12.2.2008,  15:28)
если я правильно понял, надо считать последний символ из файла

например в файле base.txt находится: 27349, значит мы должны получить '9'
Код

  ifstream in("base.txt");

  in.seekg(-1, ios::end);

  char num;
  in.get(num);

  cout << endl << endl << num;

  in.close();

да нет же! нужно последнее значение например в файл записано 
1233
56456
546
687464
и нужно чтобы из файла читалось последнее значение а не цыфра в этом случае 687464!

PM MAIL   Вверх
Optimus
Дата 12.2.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: нет
Всего: 14



Код

  ifstream in("base.txt");
  long number = 0;
  long tmp = 1;
  char ch;
  long i  = 1;

  in.seekg(i, ios::end);
  long kolSymbol = in.tellg(); // kolicestva simvolov

  in.seekg(-i, ios::end);

  in.get(ch);

  while (ch != '\n' && i != kolSymbol)
  {
    ++i;

    number += (ch - '0') * tmp;
    tmp *= 10;

    in.seekg(-i, ios::end);

    in.get(ch);
  }

  cout << endl << endl << number << endl;


  in.close();


так пойдет ?
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
dizel003
Дата 12.2.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(Optimus @ 12.2.2008,  16:50)
Код

  ifstream in("base.txt");
  long number = 0;
  long tmp = 1;
  char ch;
  long i  = 1;

  in.seekg(i, ios::end);
  long kolSymbol = in.tellg(); // kolicestva simvolov

  in.seekg(-i, ios::end);

  in.get(ch);

  while (ch != '\n' && i != kolSymbol)
  {
    ++i;

    number += (ch - '0') * tmp;
    tmp *= 10;

    in.seekg(-i, ios::end);

    in.get(ch);
  }

  cout << endl << endl << number << endl;


  in.close();


так пойдет ?

кажется подходит! Но не как не пойму что за ошибки он выдаёт! 

Код

 void write(Tovar t) 
 {
      ifstream in("base.txt");
 ofstream fout("base.txt",ios::app);
  long number = 0;
  long tmp = 1;
  char ch;
  long i  = 1;
   int metka=0;
 do
  in.seekg(i, ios::end);
  long kolSymbol = in.tellg(); // kolicestva simvolov

  in.seekg(-i, ios::end);

  in.get(ch);
  while (ch != '\n' && i != kolSymbol)
  {
    ++i;
    number += (ch - '0') * tmp;
    tmp *= 10;
    in.seekg(-i, ios::end);
    in.get(ch);
  }
  cout << endl << endl << number << endl;
  in.close(); 
  {
 cout<<Rus("Введите первое число")<<endl;
 cin>>t.а;
 cout<<Rus("Введите второе число")<<endl;
 cin>>t.b;
 t.c=t.a+t.b;

 fout<<"\n"<<t.c;
 cout<<Rus("Добавить еще запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Ввод: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 fout.close();
 fout.clear();
 }


Добавлено через 1 минуту и 15 секунд
long kolSymbol = in.tellg(); // kolicestva simvolov
В этой строке кажется он просто не знает переменную kolSymbol и её надо ввести заранее... а вторую ошибку так и немогу понять!
PM MAIL   Вверх
Optimus
Дата 12.2.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: нет
Всего: 14



напиши какие ошибки выдает.
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
dizel003
Дата 13.2.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



ВОТ:   

C:\Documents and Settings\ник\Рабочий стол\54321\54321.cpp(68) : error C2062: type 'long' unexpected
   C:\Documents and Settings\ник\Рабочий стол\54321\54321.cpp(74) : error C2065: 'kolSymbol' : undeclared identifier
Error executing cl.exe.

54321.exe - 2 error(s), 0 warning(s)
PM MAIL   Вверх
bsa
Дата 13.2.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



после do обычно ставят открывающую фигурную скобку. а у тебя ее нет.
PM   Вверх
dizel003
Дата 13.2.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(bsa @ 13.2.2008,  16:41)
после do обычно ставят открывающую фигурную скобку. а у тебя ее нет.

теперь он показывает кажется что некоректно закончен файл! Мне кажется надо гдето ещё поставить } но я незнаю где


Вот 
Код

void write(Tovar t) 
 {
      ifstream in("base.txt");
 ofstream fout("base.txt",ios::app);
  long number = 0;
  long tmp = 1;
  char ch;
  long i  = 1;
   int metka=0;
 do
{
  in.seekg(i, ios::end);
  long kolSymbol = in.tellg(); // kolicestva simvolov

  in.seekg(-i, ios::end);

  in.get(ch);
  while (ch != '\n' && i != kolSymbol)
  {
    ++i;
    number += (ch - '0') * tmp;
    tmp *= 10;
    in.seekg(-i, ios::end);
    in.get(ch);
  }
  cout << endl << endl << number << endl;
  in.close(); 
  {
 cout<<Rus("Введите первое число")<<endl;
 cin>>t.а;
 cout<<Rus("Введите второе число")<<endl;
 cin>>t.b;
 t.c=t.a+t.b;

 fout<<"\n"<<t.c;
 cout<<Rus("Добавить еще запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Ввод: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 fout.close();
 fout.clear();
 }




Такую ошибку он выдаёт - 
C:\Documents and Settings\íèê\Ðàáî÷èé ñòîë\54321\54321.cpp(110) : fatal error C1004: unexpected end of file found




Вот простейшая программа где можно использовать эту функцию!

Код

 #include <iostream.h> //Подключение библиотек
 #include <fstream.h>
 #include <windows.h>
 #include <iomanip.h>
 
 char bufRus[256]; //Русификация
 char *Rus (const char* text)
 {CharToOem(text,bufRus);
 return bufRus;
 }
 
 struct Tovar //Описание структуры
 {double a,b,c;
 };
 
  //Прототип функции
 void write(Tovar);

 
 int main()
 {Tovar t;
 int choose;
                                                       //Интерфейс
 cout<<Rus("1)Добавление новой записи")<<endl;


 cout<<Rus("Выбор: ");
 cin>>choose;
 switch(choose)//Вызовы функций
 {
 case 1:
     write(t);
     break; 


 default:cout<<Rus("Смотри что вводишь!");break;
 }
 return 0;
 }
 

 void write(Tovar t) //Описание функции записи
 {
      ifstream in("base.txt");
 ofstream fout("base.txt",ios::app);
  long number = 0;
  long tmp = 1;
  char ch;
  long i  = 1;
  
 int metka=0;
 do
 {
  in.seekg(i, ios::end);
  long kolSymbol = in.tellg(); // kolicestva simvolov

  in.seekg(-i, ios::end);

  in.get(ch);

  while (ch != '\n' && i != kolSymbol)
 
  {
    ++i;
    number += (ch - '0') * tmp;
    tmp *= 10;
    in.seekg(-i, ios::end);
    in.get(ch);
  }
  cout << endl << endl << number << endl;
  in.close(); 
 
 {

     cout<<Rus("ВВедите первое число")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число")<<endl;
 cin>>t.b;

 fout<<"\n"<<t.a;
 t.c=t.a+t.b;
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 fout.close();
 fout.clear();
 } 

 


PM MAIL   Вверх
bsa
Дата 13.2.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



в строке 28 лишняя открывающая фигурная скобка
PM   Вверх
dizel003
Дата 13.2.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(bsa @ 13.2.2008,  18:20)
в строке 28 лишняя открывающая фигурная скобка

Спачибо огромное!!! smile  как будет 100 сообщений обязательно поставлю тебе +! smile 
PM MAIL   Вверх
JackYF
Дата 13.2.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(dizel003 @  13.2.2008,  17:56 Найти цитируемый пост)
как будет 100 сообщений обязательно поставлю тебе +!

когда это ещё будет... выполнено  smile  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizel003
Дата 14.2.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Совсем скоро! smile 
PM MAIL   Вверх
bsa
Дата 14.2.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(dizel003 @ 13.2.2008,  18:56)
Спачибо огромное!!! smile  как будет 100 сообщений обязательно поставлю тебе +! smile

Мне уже плюс поставили, так что можешь не сильно торопиться.
PM   Вверх
dizel003
Дата 22.2.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Ладно! 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.