User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 391,949 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,891 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser:
Views: 3906 | Replies: 22
Reply
Join Date: Nov 2005
Location: Georgia
Posts: 5
Reputation: dj_money is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
dj_money dj_money is offline Offline
Newbie Poster

Help How do you Terminate an Infinite Loop? Impossible!!!

  #1  
Nov 11th, 2005
Help me here guys! I try building an infinite loop but don't know how to terminate it.

//Description:
//This program asks the user to terminate an infinite loop
//with a sentinel value of any kind.

//This is a regular infinite loop.
//This would just run infinitely with no end.
//I've tried many ways to terminate it but I can
//never get pass the errors.
//I've used the break statement and still give me errors.
//Help me. I think it's impossible to break an infinite loop.


# include <iostream>

using namespace std;

int main (void){

int test = 0;
while (test < 10)
cout<<"Hello \n";

return 0;
}




// Here is the one that I've tried and it works.
//It will terminate the loop but it's NOT an Auto Infinite Loop like the one above.
//Description:
//This program asks the user to terminate an infinite loop
//with a sentinel value of any kind.




# include <iostream>
# include <cmath>

using namespace std;

int main(void){

int test = 0;
char stop;


while (test++ < 10){
cout<<"Hello \n";
cin>>stop;
if (stop == 'q') //Pressing (sentinel value) q on the keyword will terminate the program.
break;
}
cout<<"Program has been terminated! \n";

return 0;

}

//help guys, i think it's impossible to end an infinite loop
//that keeps running automatically until someone press
//a sentinel value to terminate it.
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Sep 2004
Location: Belgium
Posts: 405
Reputation: JoBe is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 2
JoBe's Avatar
JoBe JoBe is offline Offline
Posting Pro in Training

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #2  
Nov 11th, 2005
#include <iostream>

using namespace std;

int main()
{
	int stop = 0;

	while (true)
	{
		stop++;

		cout<<"Hello!\n";

		if(stop == 5) break;
	}

	return 0;
}

OR

#include <iostream>

using namespace std;

int main()
{
	int i = 0;

	for(;;)
	{
		i++;
		cout<<"Hello!\n";

		if (i == 5) break;
	}

	return 0;
}

Hope this helps

One other thing, when posting code use code tags like this:

[ code ]code in here [ /code ] but without the space between the square brackets :!:
Reply With Quote  
Join Date: Nov 2005
Location: Georgia
Posts: 5
Reputation: dj_money is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
dj_money dj_money is offline Offline
Newbie Poster

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #3  
Nov 11th, 2005
Thanks for the advice. How you got your program running was for an infinite loop to run and end automatically by itself. Well, what I meant that was hard to do was "How to manually end an auto-infinite loop." I think it's just impossible. But i may be proven wrong.
//help guys, i think it's impossible to end an infinite loop
//that keeps running automatically until someone press
//a sentinel value to terminate it.
Reply With Quote  
Join Date: Sep 2004
Location: Belgium
Posts: 405
Reputation: JoBe is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 2
JoBe's Avatar
JoBe JoBe is offline Offline
Posting Pro in Training

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #4  
Nov 11th, 2005
Hmm, well, the only way I can think of is this way:

#include <iostream>

using namespace std;

int main()
{
	char ch = 'j';

	for (;;)
	{
		cout<<"Hello!\n";

		cin>> ch;

		if(ch == 'Q') break;
	}

	return 0;
}
Reply With Quote  
Join Date: Nov 2005
Location: Georgia
Posts: 5
Reputation: dj_money is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
dj_money dj_money is offline Offline
Newbie Poster

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #5  
Nov 11th, 2005
The way you have yours is the same like my second one.
Your code is about pressing a key from the keyboard to get "Hello" to continue infinitely until we key in the sentinnel value to interrupt it.
Well, what's hard to do was to not press anything from the key and just let cout<< "Hello" To Loop infinitely by itself UNTIL a sentinnel value is given from the keyboard and that will be the only time to press a key.

An Example of the Program Output:

Hello
Hello
Hello
Hello
Hello
"etc..." it would say Hello infinitely without pressing any key.
until a sentinel value or sentinel key is punched from the keyboard to Interrupt the
infinite looping program.
Reply With Quote  
Join Date: Jul 2005
Posts: 1,095
Reputation: Lerner is a jewel in the rough Lerner is a jewel in the rough Lerner is a jewel in the rough Lerner is a jewel in the rough 
Rep Power: 9
Solved Threads: 141
Lerner Lerner is offline Offline
Veteran Poster

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #6  
Nov 11th, 2005
Using cin >> will pause the program until input occurs. My suggestion would be to consider using kbhit() from the non-standard conio.h file (not all compilers have this file). Sprinkle calls to kbhit() before or after any critical sections and if you want to quit only if a keystroke was made and it was a specific, then make the conditional compound. To my knowledge, which is far from all encompassing, there is no standard way to do this, though. I'll be happy to hear otherwise.
Reply With Quote  
Join Date: Nov 2005
Location: Georgia
Posts: 5
Reputation: dj_money is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
dj_money dj_money is offline Offline
Newbie Poster

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #7  
Nov 11th, 2005
Originally Posted by Lerner
Using cin >> will pause the program until input occurs. My suggestion would be to consider using kbhit() from the non-standard conio.h file (not all compilers have this file). Sprinkle calls to kbhit() before or after any critical sections and if you want to quit only if a keystroke was made and it was a specific, then make the conditional compound. To my knowledge, which is far from all encompassing, there is no standard way to do this, though. I'll be happy to hear otherwise.

Thanks Lerner,
I've figured there would be no standard way to do this. Thanks for the advice. I'll try conio.h but I doubt that I would have it in my compiler. I'll try looking.

Thanks again guys.
If there are still other solutions. I'm glad to hear from it. would be very helpful.
Reply With Quote  
Join Date: Feb 2005
Posts: 461
Reputation: winbatch is on a distinguished road 
Rep Power: 4
Solved Threads: 18
winbatch's Avatar
winbatch winbatch is offline Offline
Posting Pro in Training

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #8  
Nov 11th, 2005
Guys,
There's a much better way to do this.

#include <signal.h>
#include <iostream>
using namespace std;
void catch_signal(int sig_num);
void catch_signal(int sig_num)
{
	cout<<"HEY! somebody cancelled me..."<<endl;
	exit( 1 );
}
int main( int argc, char * argv[] )
{
		signal(SIGINT, catch_signal);
		while ( true )
		{
				cout<<"BLAH"<<endl;
		}
		return 0;
}
 

BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
BLAH
^CBLAH
BLAH
HEY! somebody cancelled me...
Reply With Quote  
Join Date: Feb 2002
Location: Lawn Guylen, NY
Posts: 10,879
Reputation: cscgal is just really nice cscgal is just really nice cscgal is just really nice cscgal is just really nice cscgal is just really nice 
Rep Power: 32
Solved Threads: 107
Admin
Staff Writer
cscgal's Avatar
cscgal cscgal is offline Offline
The Queen of DaniWeb

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #9  
Nov 11th, 2005
Where in your code do you specify that the signal thingy is looking for Ctrl+C?
Reply With Quote  
Join Date: Apr 2004
Posts: 3,449
Reputation: Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light 
Rep Power: 16
Solved Threads: 138
Colleague
Dave Sinkula's Avatar
Dave Sinkula Dave Sinkula is offline Offline
long time no c

Re: How do you Terminate an Infinite Loop? Impossible!!!

  #10  
Nov 11th, 2005
Originally Posted by winbatch
void catch_signal(int sig_num)
{
	cout<<"HEY! somebody cancelled me..."<<endl;
	exit( 1 );
}
You shouldn't be putting standard output stuff in a signal handler. Search also for sig_atomic_t.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb C++ Marketplace
Thread Tools Display Modes

Other Threads in the C++ Forum

All times are GMT -4. The time now is 8:59 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC