|
Any 'O' char (ASCII code 79) between zeroes?
Cheers
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
No, I have copied/pasted from the above records (as they are zeroes) and also manually put in zeroes, but same result.
There are definitely 3 zeroes before the 8.
Cheers
Graham
|
|
|
|
|
Can you please provide a code snippet showing the declaration of the variables?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Sure
In a header file
struct data {
int idx_;
int noOfRegs_;
} *data_;
.. and then later (in a function) ...
int records_in_file = 152;
CString fname = "..//Data//sta-f-83.crs";
data_ = new data[records_in_file];
// and this is what I posted earlier
ifstream f_;
f_.open(fname);
while(i < records_in_file) {
f_ >> data_[i].idx_ >> ws;
f_ >> data_[i].noOfRegs_ >> ws;
i++;
}
Thx
Graham
|
|
|
|
|
As a wild guess I'd say it's interpreting the numbers as octal due to the leading 0. 8 is not a legal octal digit so the stream stops reading after "000" which is why you get 0.
|
|
|
|
|
Thanks
So what do I do?
Graham
|
|
|
|
|
I don't know the stream classes well enough, I would guess that there is a function or manipulator that will make it parse numbers as base 10.
|
|
|
|
|
Use f_.setf(ios::dec) just befor reading values. For istance:
f_.setf(ios::dec);
while(i < records_in_file) {
f_ >> data_[i].idx_ >> ws;
f_ >> data_[i].noOfRegs_ >> ws;
i++;
}
I have to admit, Michael Dunn was very clever.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Just quickly tried it - need to fully test - but looks good.
Thanks both. I owe you one.
Cheers
Graham
|
|
|
|
|
I'm working on my psychic debugging powers.
|
|
|
|
|
Michael Dunn wrote: I'm working on my psychic debugging powers
Hey Mike, I have a bug. How can I fix it?
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
|
|
|
Hi all,
my question is if I define a class myClass with destructor, assign operator (=) and copy constructor, etc etc.
If I later use my class like this:
myClass &a=*new myClass(whatever);
myClass &b=a;
Do I have to explicitly delete b? I've read you should only delete a class if you have instantiated it with a new. I know that behind the curtains b is created with a new call inside the dll, but do I have to delete it explicitly from my app?
thanks
|
|
|
|
|
gumi_r@msn.com wrote: myClass &a=*new myClass(whatever);
myClass &b=a;
since you've dynamically allocated memory for an istance of myClass , then you have to delete it somewhere. You can call either delete &b or delete &a (of course don't call both).
Cheers
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Ok thanks. That makes sense as I'm already deleting any pointers I need to inside my copy constructor.
Next step would be the assignment operator. Say for example y have:
myClass &a=*new myClass(whatever);
myClass &b=*new myClass(whatever);
myClass &c=a+b;
do I have to delete &c?
thanks for any replies.
|
|
|
|
|
gumi_r@msn.com wrote: myClass &c=a+b;
IMHO you should not do this, because you're trying to assign a reference to a temporary object. For instance, the following is noy allowed(the compiler complains about):
int &i= *new int(5);
int &j=i;
int &k=i+j;
BTW: Doing some experimentation?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
It is not illegal if you use a const reference.
Steve
|
|
|
|
|
Yeah, I didn't know it. Thank you (though seems rather clumsy...).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
I would like to give a command from inside my program to do a File New command.
I tried pApp->CWinApp::OnFileNew() but it tells me I can't access a protected member.
Fair enough, but is there some system command I can give instead?
Thanks,
Ilan
|
|
|
|
|
Try this:
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), ID_FILE_OPEN, 0, 0);
or even
AfxGetMainWnd()-> PostMessage(ID_FILE_OPEN, 0, 0);
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Up front it looks like a good idea, but I put in break points and it doesn't reach them. So, I'm still stuck on the proper way to do it.
|
|
|
|
|
You're going to have to give more detail if you want help. WHERE did you put the breakpoints?
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Sorry, I didn't realize you continued to look at my posts.
I have break points at both OnNewDocument and OnOpenDocument
<br />
<br />
BOOL CCardiacDoc::OnNewDocument()<br />
{<br />
char buff[100];<br />
if( m_dataDirectory.GetLength() == 0 && _getcwd(buff, 98)) {<br />
m_dataDirectory = buff;<br />
m_dataDirectory += "\\*";<br />
}<br />
if (!CDocument::OnNewDocument())<br />
return FALSE;<br />
<br />
<br />
return TRUE;<br />
}<br />
<br />
BOOL CCardiacDoc::OnOpenDocument(LPCTSTR lpszPathName)<br />
{<br />
m_dataDirectory = lpszPathName;<br />
int j = m_dataDirectory.ReverseFind('\\');<br />
if( j > 0) {<br />
m_dataDirectory = m_dataDirectory.Left(j+1) + "*";<br />
}<br />
if (!CDocument::OnOpenDocument(lpszPathName))<br />
return FALSE;<br />
<br />
<br />
return TRUE;<br />
}<br />
I see that when I start the program it goes to OnNewDocument. Likewise, before I override the OnOpen, it goes to OnOpenDocument. The function I use is:
<br />
void CCardiacDoc::OnFileOpen()<br />
{<br />
CString path1;<br />
int flags;<br />
CFileDialog fdlg( true, NULL, "dummy entry");<br />
fdlg.m_ofn.lpstrTitle = "Choose directory";<br />
flags = fdlg.m_ofn.Flags;<br />
fdlg.m_ofn.Flags = flags;<br />
if( fdlg.DoModal() == IDOK)<br />
{<br />
path1 = fdlg.m_ofn.lpstrFile;<br />
int i = path1.GetLength();<br />
i -= (int) strlen(fdlg.m_ofn.lpstrFileTitle);<br />
m_dataDirectory = path1.Left(i) + "*";<br />
AfxGetMainWnd()->PostMessage(ID_FILE_NEW, 0, 0);<br />
}<br />
}<br />
It never again reaches OnNewDocument. If I would use ID_FILE_OPEN (which I tried), I would expect it to reach my overridden routine, which it doesn't. I really want it to go to OnNewDocument which I why I assume you had a small typo.
Thanks,
Ilan
|
|
|
|