#### Archived

This topic is now archived and is closed to further replies.

# Weird Problems with stdio and iostream

This topic is 5384 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Ok, I''ll show you the code first and maybe you can help out...
int checkCommand(char commandSeq, int sock){
char guess[256];
char sure;
bool guessAgain = true;

if (commandSeq==''/''){
while(guessAgain){
//cin.get(guess,256);
//cin.getline(guess, 256);
scanf(guess);
cout<<"Are you sure? - Y/N :";
cin>>sure;

if(sure==''Y''){
send(sock,guess, strlen(guess)+1, 0);
guessAgain=false;
}
else{
cout<<"...guess again..."<
Then, I call it in a piece of code that looks like this...
cout<<"------------------"<<try1<<"------------------"<>letterToGuess;
send(sock,letterToGuess, 2, 0);			//send the guessed letter
checkCommand(letterToGuess[0], sock);
sleep(2);

Now the funny thing is that the scanf/cin.getline/gets/etc. never waits for my input...the proggy keeps plugging along...I am very confused as I have even copy and pasted the code out of "checkCommand" into another file. It works as expected there and waits for my input before moving along...any idea''s at all?


##### Share on other sites
thought I might show you a run as well to further illustrate my problem...anyway, here it is.
---Type ''/'' to guess the phrase-------Your hint is----Historical Event	------------------1----------------------The Phrase is----****** *** *****Enter Letter to guess: a------------------2----------------------The Phrase is----****** **A *A***Enter Letter to guess: /Your Guess is:Are you sure? - Y/N :N...guess again...Your Guess is:Are you sure? - Y/N :Y------------------3----------------------The Phrase is----****** **A *A***Enter Letter to guess: bash-2.05b\$ exitexit

##### Share on other sites
I just glanced at the code but had a couple of suggestions.

When you use cin, you have to flush the input buffer or it won''t pause there. Check msdn.microsoft.com for more info - they have a sample of how to clear it.

when you use scanf, you need to give it the data type.

scanf ( "%s", guess );

that should work

hope that helped

##### Share on other sites
Before you call checkCommand( ... ) you make a call "cin>>letterToGuess;"

Problem:
You need to be aware that you are perfroming FORMATTED input here - leading whitespace up to something that can be interpreted as (I assume) a char is ignored and everything after that also.

What has happened is that you are hitting ''Return'' after typing the letter and the newline is NOT REMOVED from the underlying buffer, and just lies there until the next time a call to cin comes along.

Solution:
Call istream& istream::ignore( streamsize n = 1, int delim = EOF ), which will discard one character from the underlying buffer (with default arguments).

I notice you are using bash - as a side note using gcc-3.1 I think you might notice some slightly odd behaviour a call to ignore (not seen on 2.95, 3.2+, msvc, as other compilers I have used). I can''t remember exactly what it is though ;-)

##### Share on other sites
That solved my problem...thanks guys...when I get this networked wheel of fortune done I''ll be sure to post it for all to have fun with...

##### Share on other sites
I think there is also a ::synchwithstdio() method for iostream. It''s been a while since I used both, so I don''t remember the exact use of the function (or the name for that matter), but sometimes you''ll have problems mixing the two if you aren''t careful. You may want to flush() the streams before you call the scanf and stuff.

1. 1
2. 2
3. 3
frob
15
4. 4
5. 5

• 20
• 12
• 13
• 14
• 84
• ### Forum Statistics

• Total Topics
632143
• Total Posts
3004417

×