Anoss, упс... ппц как я ступил, сначала непонял прикола, оказалось ch было интом.... ппц... извиняюсь...
такие тупости, вот что значит на cpp не писал, вчера ещё классы изучал, забыл после определения класса, после фигурной скобки поставить точку с запятой, ппц сколько сидел, думал что у меня крыша едет.... )))
Anoss, Спасибо что помогаешь!
вот код метода, класс неполностью, я только то что для метода нужно расписал, так до кучи.
есть подозрения что как бы указатель текущей позиции в файле указывает на конец файла, при втором вызове, так бы замутить что нить типа rewind()...
но с другой стороны, поток то по новой открывается...
Код:
class base { unsigned long int card_num; unsigned int ball_num[5]; fstream io; file_name[100]; public: show_all(); };
base::show_all() { io.open(file_name,ios::in); if(!io) /* if(!io.is_open()) - тоже самое вроде как */ { cout<<"can't open file"<<endl; } else { char temp[16]; io>>temp[0]; if(temp[0]=='R'||temp[0]=='D') { cout<<"card num\ts1\ts2\ts3\ts4\ts5"; int i,j,k; while(!io.eof()) { io>>temp; if(temp[0]=='\0'&&io.eof())break; for(k=0;temp[k]!='\0';k++); card_num=0; for(j=0;k--;j++)card_num+=(temp[k]-'0')*pow(10,j); for(i=0;i<5;i++) { io>>temp; for(k=0;temp[k]!='\0';k++); ball_num[i]=0; for(j=0;k--;j++)ball_num[i]+=(temp[k]-'0')*pow(10,j); } cout<<endl<<card_num<<"\t"; for(i=0;i<5;i++)cout<<"\t"<<ball_num[i]; } } else cout<<"failed file format"<<endl; io.close(); } }
при повторном вызове этого метода io.is_open() возвращает false
и ещё интересует такой вопрос, можно ли удалить кусок данных из середины файла? как?
оффтоп, как мне плохо без полного справочника по C++ Герберта Шилдта, вечно когда нужен, у кого то он лежит там наверняка всё есть... как я привык к СИшному файловому вводу/выводу
Там я при считывании не проверял на достижение конца файла, просто пока нужно написать хотя бы, что бы работало, да и формат файла позволяет, учитывая что его создавать через прогу, и не редактировать сторонними прогами, т.е. с чтением данных там проблем не возникает точно...
Anoss, гм, странно, у меня и твоя прога выводит только один раз!!!
компилю MS Visual C++ v.6.0 Добавлено спустя 31 минуту, 37 секунд Dev-C++ скачал, тоже также как и в MSVC++,
в борлэнде 3.1 фиг знает какого года, чуток подредактировав, твоя программа работает правильно...
жаль что мне много надо редактировать что бы на борлэнд перейти...
п.с. вопрос с вырезанием куска данных из середины файла открыт... просто я незнаю как это сделать, кроме того что записать во временный файл начальный и конечный куски, а потом собрать в одно
п.с.2. ещё есть проблема в создании и переименовании файла используя файловый ввод/вывод Си++
Member
Статус: Не в сети Регистрация: 02.02.2004 Откуда: Украина.
Не могу побороть ошибку
вот код. пир запуске пишет BGI Error: Graphics not initialized (use 'initgraph'). файл EGAVGA.BGI кидал уже куда только можно, результат 1. может среда не натсроена может не понимаю чего-то
Member
Статус: Не в сети Регистрация: 02.02.2004 Откуда: Украина.
Попробую. Может кто-то вышлет папку BGI на адрес sasha2541=yandex.ru? Добавлено спустя 10 часов, 4 минуты, 42 секунды Всё нашел подходящий EGAVGA.BGI. SVGA работать отказался по неизвестной причине.
Заблокирован Статус: Не в сети Регистрация: 30.10.2007 Откуда: Одесса
Я только учусь кодить. В книге было задание написать прогу которая бы возводила в степень через рекурсивную функцию. Можно ли улучшить нижеследующий код?
#include <iostream.h>
#include <stdlib.h>
int Degr(int); int y; int x ;
int main()
{
int z;
cout <<"Vvedite 4islo a zatem stepen' \n" ; cin >>x; cin >>y;
z = Degr(x);
cout <<"Rezul'tat= " <<z;
system("PAUSE");
return 0;
}
int Degr(int a)
{a=a*x ;y=y-1; if (y>1) {return Degr(a);}
}
_________________ Если Бог за нас, кто против нас?(с) Библия В случае масштабных военных действий, эвакуация населения не только не производится, но и не планируется.
int pow(int value, unsigned int power) { return power == 0 ? 1 : value * pow(value, --power); }
Потому что вызов if (power == 1) слишком дорого обходиться, он может вызваться раз 10 (если десятая степень), а в этом случае лучше уж один раз умножить, чем столько раз сравнивать. Еще можно сделать перегрузки для разных типов, а не только для int.
Или даже вот так лучше:
Код:
int pow(int value, unsigned int power) { if (power < 2) return power == 1 ? value : 1; else return value * pow(value, --power); }
Заблокирован Статус: Не в сети Регистрация: 30.10.2007 Откуда: Одесса
Anoss спасибо за ответ. Но я раньше не сталкивался с "using namespace std;" Для чего оно используется? Я компилю через Dev-c++ и если в тексте проги нет system("PAUSE") то окно после ввода всех данных и нажатия Enter, просто исчезает...
_________________ Если Бог за нас, кто против нас?(с) Библия В случае масштабных военных действий, эвакуация населения не только не производится, но и не планируется.
Everlast82 Зачем pause использовать. Я лично люблю подключать <conio.h> и писать функцию в конце _getch(), которая ожидает нажатия любой клавиши. Есть и другие способы.
using namespace std;
Используется для сообщения о том, что ты используешь пространство имен std. Если этого не сделать, то не будет доступа к cout, cin, без приписки std:: (например std::cout), которые использовал Anoss при написании кода.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения