|
how to get the number of digits after the decimal point
ex :
Input : 5.1234
Expected Output : 4
i wrote this code but there are wornings..
what is wrong here ??
double input;
int x=input; // so x=the integeral part of input
int y=input-x; // so y=the fractional part
while(y>0)
{count++;
input*=10;
x=input;
y=input-x;
}
plz help me !!
elmahdy
|
|
|
|
|
you won't get the fractional part in y because it is an int.
|
|
|
|
|
I'm guessing there are a lot of ways to do this. How about this!
double input;
int Num = static_cast< int >( input );
intput -= static_cast< double >( Num );
You should now just have the .XXXX
Char szData[1024];
ssprintf( szData, "%f", &Input );
int iLengt = strlen( szData ) - 2; //For the zero & the '.'
This can give you a start.
Larry J. Siddens
Cornerstone Communications
TAME THE DOCUMENT MONSTER
www.unifier.biz
|
|
|
|
|
Any one know if it’s possible to change or add to the environment variables of the calling process?
I know it's really easy to change the current processes env vars, and child process env vars...
Thanks,
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I don't think it is possible. What a you trying to do?
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
I am trying to write a console executable that can be used in a batch file to change the environment vars of the batch file depending on user input and or contents of a text file.
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
Hi,
I'm trying to add a submenu into the Main File Menu, and I want to populate the submenu dynamically. But, I'm getting an error on AppendMenu() at runtime.
Here is what I'm doing:
CMenu* menu_bar = AfxGetMainWnd()->GetMenu();
CMenu* file_menu = menu_bar->GetSubMenu(0);
for (int iCount =0; iCount<maximum ;="" icount++)
{
if="" (!uniquehierarchyname[icount].isempty())
{
hierarchysubmenu.appendmenu="" (mf_string,="" id_base_command="" +icount,="" uniquehierarchyname[icount]);
}
}
file_menu-="">AppendMenu (MF_POPUP, (UINT)HierarchySubmenu.m_hMenu, "&Add Hierarchy from Submenu");
|
|
|
|
|
When should I return an error code instead of throwing an exception and vice versa?
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
That is such a massive issue. If you are making a C++ program returning error codes is dumb because you need to return something sensible in proper OO design.
I recommend you buy yourself a C++ book because almost any is bound to have a long description with example code.
I say: never return an error code. With the exception of int main() of course
dog_spawn
http://www.hatekill.com[^]
|
|
|
|
|
dog_spawn wrote:
recommend you buy yourself a C++ book
I do have one. But doesn't say when to use exceptions
dog_spawn wrote:
I say: never return an error code. With the exception of int main() of course
Is that real OO? Cool, I'll see what I can do with my class framework I'm current designing.
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
Get into the habit of handling errors via exception handling. Here's more.[^]
Regards,
Alvaro
Hey! It compiles! Ship it.
|
|
|
|
|
Great! Thaks alot for clearing things up!
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
Exceptions are for truly exceptional errors. Like the file you are working on has suddely disapeared, or you cant get enough memory etc. That Kind of things that you can never be sure when it happenes.
Return code , to the contrary are the everyday case of an error: All those stuff you know that can happen, but your routine can't cope with on itself, like a file can not be opened, user gave your parser too few arguments, the file format of your data is not as expected etc.
All this are things that happen quite often, and you can think of them easily, but your routine must rely on its caller to solve them (e.g. query the user, something your file-handling routines should do, as they are not part of the GUI).
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
I agree with (almost ) everything above, but also believe...
That you should only consider throwing exceptions when you fully understand the consequences of doing so, specifically issues to do with the overheads, resource aquistion and stack unwinding. Writing consistantly exception safe c++ code is extremely hard, even for the best programmers.
Herb Sutter and Scott Meyers have some superb articles on Exception safety, I strongly recommend you look at their material.
Error codes are appropriate in situations where performance is absolutely critical or exception safety is not an option. Two examples are some operating systems, old versions of CE AFAIK, and the standard IOStreams library.
The C/C++ Users Journal tend to spend a significant ammount of time covering this type of issue.
If you can keep you head when all about you
Are losing theirs and blaming it on you;
If you can dream - and not make dreams your master;
If you can think - and not make thoughts you aim;
Yours is the Earth and everything that's in it.
Rudyard Kipling
|
|
|
|
|
In VC++ 6.0, Windows 2000, how to schedule a thread to run on a specific CPU?
Is there any APIs or methods?
Thanks,
Leo
|
|
|
|
|
|
Thanks.
|
|
|
|
|
Here's the situation:
class A
{
public:
friend ostream& operator<<(ostream& os, const A& a)
public:
void ShowExpandedInfo() { cout<<this <<endl; }
};
=================
class B : public A
{
public:
void RunOuterLoop();
};
=================
int main()
{
A a;
B b;
b.RunOuterLoop();
return 0;
}
==================
void B::RunOuterLoop()
{
ShowExpandedInfo();
}
The problem (as you all know) is that in activating ShowExpandedInfo (from RunOuterLoop), what gets shown, is B's data instead of A's.
Inside the 'friend' function is where I do formatting (etc.) of A's data prior to printing.
I've tried just about every trick and clever idea I could come up with, to get A's data to show, which the compiler dutifully shoots down every time.
The sample is not written in stone. It gets changed around with some of the various things I try. What is shown, is merely a starting point to demonstrate the general layout of code, and what I'm trying to accomplish.
I would be remiss if I didn't say one of the things I tried, was to use a 'const' reference of 'A' as a parameter of RunOuterLoop (and changed the code to suit that approach). It didn't work, since that simply showed and empty 'A'.
Thanks for any thoughts or ideas on how I can get A's object to show from 'B'?
William
Fortes in fide et opere!
|
|
|
|
|
Your design is actually wrong because operators of course cannot be virtual. Why don't you simply make a virtual toString() function that you call in the overloaded operator <<?
If you want to use polymorphism you really should be using pointers. I fail to see the point of your code.
You seem to have overcomplicated something that is very simple
|
|
|
|
|
It's because operators are not virtual why I used a friend function to do the overloading, and it's because friends are not inheritable why the function to show the data is declared and defined in the base class.
Polyphormism was actually one of the things I tried, which turned out to be more work without the solution I sought. I pretty much obtained the same result just as when I didn't use it, and it's because an object of a derived class can be treated an object of its corresponding base class, why I didn't see a need for other polymorphic attempts.
Instead of talking about overcomplicating something that you see as "simple", why didn't you present your "simple" solution?
William
Fortes in fide et opere!
|
|
|
|
|
I did present a simple solution. Reread my post?
|
|
|
|
|
What you're trying to do is strange. The compiler is behaving correctly. When you say "cout << this << endl; " this is an instance of B so that's what's being passed to the << operator.
I also don't understand what you mean by: it shows B's data instead of A's. B's data is also A's. B is just an extended version of A. I don't see how the two would be different. Perhaps you could extend your example to show what you mean by A's data vs. B's data.
In case you haven't, here's a couple more things to try inside your operator:
1. (A)a.some_data
2. a.A::some_data
Regards,
Alvaro
Hey! It compiles! Ship it.
|
|
|
|
|
Thanks for replying.
I am NOT disputing the compiler at any time is wrong; just the opposite (which is why I am still looking for a way to get what I'm trying to accomplish.)
It is because the compiler is right, why the code (the way it's shown in the example) is "showing B's data instead of A's." By that I mean, because 'ShowExpandedInfo' is activated from inside a B's function, the "this" pointer is physically and logically referring to 'B' as its object, and is what gets shown. It has nothing here to do with 'B' being a part of 'A' due to the inheritance relationship.
While it is true that B's data is also A's (due to the inheritance relationship), the converse is NOT true (that 'A' is a part of 'B'). Therefore, when 'B' uses a pointer to refers to data (as "this" in the case at hand), even if that pointer could be used to access A's data, what you end up getting, is strictly B's data.
Yes, there is the matter of explicit casting, but that is something I prefer to stay away from (for the time being) and use ONLY as the very last resort.
Thanks again for replying.
William
Fortes in fide et opere!
|
|
|
|
|
I'll bite...
This may not be the solution you need, but you could make the ShowExpandedInfo() method virtual and in the derived class you could call A::ShowExpandedInfo(). The bad thing is, it would probably show A and B.
A better solution might be to get a B pointer instead and cast it however you want it to be used. Like this:
A* ptrA = NULL;
B* ptrB = new B;
ptrA = (A*)B;
ptrA->RunOuterLoop();
ptrB->RunOuterLoop();
You can pass ptrA around and cast it back to a B* since that's what it really is. I've got some code at work doing this sort of thing so if my memory of this is wrong I can look it up tomorrow.
"It is better to remain silent and be thought a fool than to open one's mouth and remove all doubt." - Abraham Lincoln
|
|
|
|
|
Thanks for replying.
What you have suggested regarding the explicit casting of a pointer to 'B', cast as a pointer to 'A', has some merit and may work. I say this because I haven't tried the explicit casting of pointers yet (and will do so ONLY as the very last resort).
I've chosen to try polymorphism, friend functions and even "slicing" (though this is just as bad as explicit casting, except you don't have to re-cast things back to set everything back in sync).
My hope was that someone might know of a clever way using friend function, smart pointer or even overloading the 'member access operator' (alias: the "->" operator).
This quest is NOT over. As Churchill adequately put it, "This is not the end. It's not even the beginning of the end. It's only the end of the beginning." The first round went to the compiler, and we are just starting the second round.
William
Fortes in fide et opere!
|
|
|
|