Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: XP bug? (code fragment)

Author: Gerd Isenberg

Date: 13:04:20 08/27/04

Go up one level in this thread


On August 27, 2004 at 15:41:33, Bas Hamstra wrote:

>On August 27, 2004 at 15:07:28, Gerd Isenberg wrote:
>
>>On August 27, 2004 at 14:58:56, Gerd Isenberg wrote:
>>
>>>On August 27, 2004 at 14:28:06, Bas Hamstra wrote:
>>>
>>>>The following program gives me other output in XP than under previous windows
>>>>versions:
>>>>
>>>>#include <stdio.h>
>>>>#include <conio.h>
>>>>
>>>>int main(int argc, char* argv[])
>>>>{       char Buf[16] = {0};
>>>>
>>>>        setbuf(stdin, NULL);
>>>>
>>>>        while(1)
>>>>        {   if(kbhit() )
>>>>            {   gets(Buf);
>>>>                printf("Received: %s\n", Buf);
>>>>            }
>>>>        }
>>>>        return 0;
>>>>}
>>>>
>>>>Output:
>>>>
>>>>aaa
>>>>Received: Paa
>>>>
>>>>So, if after typing aaa the first character seems to go lost. I am pretty
>>>>certain that under Win98 it worked like intended. Is this a bug?
>>>>
>>>>(I am using XP with Borland C++ Builder 4.0)
>>>>
>>>>Bas.
>>>
>>>
>>>with msc6 under XP i get
>>>aaa  (or any other sequence)
>>>Received: d
>>>
>>>Seems that stdin does not work unbuffered.
>>>
>>>Gerd
>>
>>
>>from
>>
>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_crt_setbuf.asp
>>
>>...
>>
>>setbuf has been replaced by setvbuf, which is the preferred routine for new
>>code. setbuf is retained for compatibility with existing code.
>
>Yes, that seems to solve the problem... Thanks Gerd.

Seems setbuf is a bit depreciated.

But setvbuf doesn't work unbuffered at all. If passing a NULL pointer,
it allocates it's own buffer. Your routine works well without any
setbuf with default buffer too, or with setbuf(stdin, buf).
Is there any special reason to switch off buffering here?

Gerd



>
>Bas.



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.