RE: help with c++ if test

  • From: "Sina Bahram" <sbahram@xxxxxxxxx>
  • To: <programmingblind@xxxxxxxxxxxxx>
  • Date: Wed, 9 Feb 2011 14:42:42 -0500

Please send out the version of this code using a goto.

Take care,
Sina

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx 
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, Tyler
Sent: Wednesday, February 09, 2011 2:40 PM
To: programmingblind@xxxxxxxxxxxxx
Subject: Re: help with c++ if test

Not exactly. Take this for example:
int i = 0;
int j = 0;
int check = 1;
for (; i < 100 && check; i++)
{
for (;j < 100; j++)
{
if (i+j == 100)
{
check = 0;
break;
}
}
}
now, that's doing an extra 100 comparisons (1 per iteration of the top 
loop), where as you could just jump to a label and be done with it.
They -are- messy, they shouldn't be used everywhere, but they are a tool 
to be used. I'm not really understanding the whole point of avoiding 
them at all cost just because they're supposed to be bad. You have one 
jump as opposed to 100 comparisons. If you like the 100 comparisons, so 
be it. But there haven't been any valid reasons beyond "this creates bad 
code," which I'll fully agree with in a lot of places. Goto should be 
used sparingly, but as I said, I think goto is a tool, just like 
anything else. A good coder will know when to make use of his tools, and 
when to use better ones, as well as the tradeoffs of using tool A over 
tool B.
On 2/9/2011 12:32 PM, Sina Bahram wrote:
> I disagree about goto. Every example you've provided, Ty, there's been a 
> better way to do it without goto.
>
> Take care,
> Sina
>
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx 
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, Tyler
> Sent: Wednesday, February 09, 2011 2:14 PM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: help with c++ if test
>
> Sina:
> You could write it as Lex suggested, and just use a variable to check,
> whichever solution you choose, it would work fine. Here's my point. Goto
> is a tool. Like any tool in c/c++, it can be abused, but it can also be
> useful to jump out of code, or when you don't want code replication. if
> (!foo()) goto handleerror; if (!bar()) goto handleerror. I've used
> this... once, possibly twice when the code for handling such an error
> was kind of long and complex and I didn't want to try to pass everything
> through a function to accomplish the same thing.
> On 2/9/2011 12:06 PM, Sina Bahram wrote:
>> Here's a new rule.
>>
>> Assume that goto does not exist. Just get rid of it. It's gone, *waves 
>> hands*.
>>
>> Now, rewrite that code.
>>
>> Take care,
>> Sina
>>
>>
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx 
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Kristoffer 
>> Gustafsson
>> Sent: Wednesday, February 09, 2011 2:03 PM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: help with c++ if test
>>
>> Hi.
>> ok, some code of mine looks like
>> #include<iostream>
>> int main()
>> {
>> string test;
>> cin>>test;
>> if (test=="fine" goto good;
>>
>> good:
>> cout<<"it works!";
>> return 0;
>> }
>>
>> I try this and I get expected `before goto.
>> What can be wrong?
>> /Kristoffer
>>
>> ----- Original Message -----
>> From: "Ken Perry"<whistler@xxxxxxxxxxxxx>
>> To:<programmingblind@xxxxxxxxxxxxx>
>> Sent: Wednesday, February 09, 2011 7:53 PM
>> Subject: RE: help with c++ if test
>>
>>
>> It is easy to do text adventures or any programming without goto.  Note that
>> my commercial mud has 0 goto statements in it.  Now all classes in college
>> will tell you to avoid goto unless you're dealing with programming operating
>> systems and need to be able to jump out of scope.  Which is one of the
>> reasons you do not want to use goto.  For example
>>
>>    Void myfunc(){
>> Goto two;
>> }
>>
>> Void myFunc2(){
>> Two:
>>
>> }
>>
>> You can actually jump function to function with goto which breaks all kinds
>> of things in functional and object oriented programming.  Now that is
>> necessary some times when doing error handling.  The truth is though if your
>> coding your own application you really should never need goto.   If you find
>> yourself using goto you have probably designed your program wrong.
>>
>> I will not go into a deep why or why not to use it because if your thinking
>> you cannot create an adventure game without it you will not understand a lot
>> of my explanation.  I think you need to go through some tutorials on c or
>> c++ which ever one you're using because you have a lot to learn.
>>
>>
>>
>> Ken
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Kristoffer
>> Gustafsson
>> Sent: Wednesday, February 09, 2011 1:41 PM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: help with c++ if test
>>
>> Hi.
>> Without goto it would be very hard to do text adventures.
>> I don't think it can be done, or can it?
>> Also, if I want my program to exit instead of continuing, how do I do?
>> I mean for example, if I die in an adventure, I want to exit the program at
>> that time, not continue the game.
>> /Kristoffer
>> ----- Original Message -----
>> From: "Littlefield, Tyler"<tyler@xxxxxxxxxxxxx>
>> To:<programmingblind@xxxxxxxxxxxxx>
>> Sent: Wednesday, February 09, 2011 7:28 PM
>> Subject: Re: help with c++ if test
>>
>>
>>> That produces all sorts of problems. jumping to the bottom of a loop is no
>>> problem with a goto, and it avoids issues with your exiting variable. it's
>>> also quicker, because you just jump to the bottom. otherwise you may
>>> break, but it's still going to have to do one more check (two, actually,
>>> depending on how the compiler does things) to see if exiting is false.
>>> On 2/9/2011 11:23 AM, Lex wrote:
>>>> 09.02.2011 20:17, Littlefield, Tyler пишет:
>>>>> really really highly recommend you avoid goto. This isn't basic, and
>>>>> they're not very useful except for in some odd cases, far and few
>>>>> between. Such as jumping out of two nested loops like so:
>>>>> int i, j;
>>>>> for (i = 0; i<   100; i++)
>>>>> {
>>>>> for (j = 0; j<   100; j++)
>>>>> {
>>>>> if (i+j == 100)
>>>>> goto botttom;
>>>>> }
>>>>> }
>>>>> bottom:
>>>>> //do something here
>>>> Actually, effect you're trying to achieve is more correctly by the
>>>> conditional variable (at least in terms of procedural programming):
>>>> bool exiting=false;
>>>> for (i = 0; i<   100&&   !exiting; i++)
>>>> {
>>>> for (j = 0; j<   100&&   !exiting; j++)
>>>> {
>>>> if (i+j == 100)
>>>> exiting=true;
>>>> }
>>>> }
>>>>
>>>>
>>>> or may be even
>>>> for (j = 0; j<   100; j++)
>>>> {
>>>> if (i+j == 100)
>>>> {
>>>> exiting=true;
>>>> break;
>>>> }
>>>> }
>>>> }
>>>>
>>>>
>>>> Lex
>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>>
>>> -- 
>>>
>>> Thanks,
>>> Ty
>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>>
>


-- 

Thanks,
Ty

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: