Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 09, 2004 std.stream.stdin.read bug ? | ||||
---|---|---|---|---|
| ||||
004020BE |> /8D45 FC /LEA EAX, [LOCAL.1] 004020C1 |. |50 |PUSH EAX 004020C2 |. |A1 70BB4100 |MOV EAX, DWORD PTR DS:[41BB70] 004020C7 |. |8B08 |MOV ECX, DWORD PTR DS:[EAX] 004020C9 |. |FF51 38 |CALL NEAR DWORD PTR DS:[ECX+38] 004020CC |. |837D FC 02 |CMP [LOCAL.1], 2 004020D0 |. |76 05 |JBE SHORT hello.004020D7 004020D2 |. |8B45 FC |MOV EAX, [LOCAL.1] 004020D5 |. |C9 |LEAVE 004020D6 |. |C3 |RET is compiled from this code: std.stream.stdin.read(input); if (input > 2) return input; the LOCAL.1 address is pointed to the read(), but is not changing to the input value. instead i get '168636723' for every input i give in.. anyone experienced with it ? is it a compiler bug or my problem ? Cheers, Asaf |
October 09, 2004 Re: std.stream.stdin.read bug ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Asaf Karagila | Asaf Karagila wrote:
> 004020BE |> /8D45 FC /LEA EAX, [LOCAL.1]
> 004020C1 |. |50 |PUSH EAX
> 004020C2 |. |A1 70BB4100 |MOV EAX, DWORD PTR DS:[41BB70]
> 004020C7 |. |8B08 |MOV ECX, DWORD PTR DS:[EAX]
> 004020C9 |. |FF51 38 |CALL NEAR DWORD PTR DS:[ECX+38]
> 004020CC |. |837D FC 02 |CMP [LOCAL.1], 2
> 004020D0 |. |76 05 |JBE SHORT hello.004020D7
> 004020D2 |. |8B45 FC |MOV EAX, [LOCAL.1]
> 004020D5 |. |C9 |LEAVE
> 004020D6 |. |C3 |RET
>
> is compiled from this code:
> std.stream.stdin.read(input);
> if (input > 2) return input;
>
> the LOCAL.1 address is pointed to the read(), but is not changing to the
> input value.
> instead i get '168636723' for every input i give in..
>
> anyone experienced with it ?
> is it a compiler bug or my problem ?
>
> Cheers,
> Asaf
I'm not sure why read() is behaving like it is, but I would try using
scanf() instead. read() is for binary input. scanf() is for text input. Are
you typing in values from the console or are you piping something into
stdin?
-Ben
|
October 09, 2004 Re: std.stream.stdin.read bug ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | "Ben Hinkle" <bhinkle4@juno.com> wrote in message news:ck8or5$k9t$1@digitaldaemon.com... > Asaf Karagila wrote: > >> 004020BE |> /8D45 FC /LEA EAX, [LOCAL.1] >> 004020C1 |. |50 |PUSH EAX >> 004020C2 |. |A1 70BB4100 |MOV EAX, DWORD PTR DS:[41BB70] >> 004020C7 |. |8B08 |MOV ECX, DWORD PTR DS:[EAX] >> 004020C9 |. |FF51 38 |CALL NEAR DWORD PTR DS:[ECX+38] >> 004020CC |. |837D FC 02 |CMP [LOCAL.1], 2 >> 004020D0 |. |76 05 |JBE SHORT hello.004020D7 >> 004020D2 |. |8B45 FC |MOV EAX, [LOCAL.1] >> 004020D5 |. |C9 |LEAVE >> 004020D6 |. |C3 |RET >> >> is compiled from this code: >> std.stream.stdin.read(input); >> if (input > 2) return input; >> >> the LOCAL.1 address is pointed to the read(), but is not changing to the >> input value. >> instead i get '168636723' for every input i give in.. >> >> anyone experienced with it ? >> is it a compiler bug or my problem ? >> >> Cheers, >> Asaf > > I'm not sure why read() is behaving like it is, but I would try using > scanf() instead. read() is for binary input. scanf() is for text input. > Are > you typing in values from the console or are you piping something into > stdin? > > -Ben input is UINT, i forgot to mention that.. sorry.. and i am typing into the console. Cheers, Asaf |
October 09, 2004 Re: std.stream.stdin.read bug ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Asaf Karagila | On Sat, 9 Oct 2004 15:31:38 +0200, "Asaf Karagila" <kas1@netvision.net.il> wrote:
>
>"Ben Hinkle" <bhinkle4@juno.com> wrote in message news:ck8or5$k9t$1@digitaldaemon.com...
>> Asaf Karagila wrote:
>>
>>> 004020BE |> /8D45 FC /LEA EAX, [LOCAL.1]
>>> 004020C1 |. |50 |PUSH EAX
>>> 004020C2 |. |A1 70BB4100 |MOV EAX, DWORD PTR DS:[41BB70]
>>> 004020C7 |. |8B08 |MOV ECX, DWORD PTR DS:[EAX]
>>> 004020C9 |. |FF51 38 |CALL NEAR DWORD PTR DS:[ECX+38]
>>> 004020CC |. |837D FC 02 |CMP [LOCAL.1], 2
>>> 004020D0 |. |76 05 |JBE SHORT hello.004020D7
>>> 004020D2 |. |8B45 FC |MOV EAX, [LOCAL.1]
>>> 004020D5 |. |C9 |LEAVE
>>> 004020D6 |. |C3 |RET
>>>
>>> is compiled from this code:
>>> std.stream.stdin.read(input);
>>> if (input > 2) return input;
>>>
>>> the LOCAL.1 address is pointed to the read(), but is not changing to the
>>> input value.
>>> instead i get '168636723' for every input i give in..
>>>
>>> anyone experienced with it ?
>>> is it a compiler bug or my problem ?
>>>
>>> Cheers,
>>> Asaf
>>
>> I'm not sure why read() is behaving like it is, but I would try using
>> scanf() instead. read() is for binary input. scanf() is for text input.
>> Are
>> you typing in values from the console or are you piping something into
>> stdin?
>>
>> -Ben
>
>input is UINT, i forgot to mention that.. sorry..
>and i am typing into the console.
>
>Cheers,
>Asaf
>
If you are typing at the console you need to use scanf. For example,
import std.stream;
int main() {
uint input;
stdin.scanf("%u",&input);
stdout.writefln("you typed ", input);
return 0;
}
|
October 09, 2004 Re: std.stream.stdin.read bug ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | "Ben Hinkle" <bhinkle4@juno.com> wrote in message news:gq1gm0l9tv2pvn05tp27m8rs5ekomhu3fu@4ax.com... > On Sat, 9 Oct 2004 15:31:38 +0200, "Asaf Karagila" <kas1@netvision.net.il> wrote: > >> >>"Ben Hinkle" <bhinkle4@juno.com> wrote in message news:ck8or5$k9t$1@digitaldaemon.com... >>> Asaf Karagila wrote: >>> >>>> 004020BE |> /8D45 FC /LEA EAX, [LOCAL.1] >>>> 004020C1 |. |50 |PUSH EAX >>>> 004020C2 |. |A1 70BB4100 |MOV EAX, DWORD PTR DS:[41BB70] >>>> 004020C7 |. |8B08 |MOV ECX, DWORD PTR DS:[EAX] >>>> 004020C9 |. |FF51 38 |CALL NEAR DWORD PTR >>>> DS:[ECX+38] >>>> 004020CC |. |837D FC 02 |CMP [LOCAL.1], 2 >>>> 004020D0 |. |76 05 |JBE SHORT hello.004020D7 >>>> 004020D2 |. |8B45 FC |MOV EAX, [LOCAL.1] >>>> 004020D5 |. |C9 |LEAVE >>>> 004020D6 |. |C3 |RET >>>> >>>> is compiled from this code: >>>> std.stream.stdin.read(input); >>>> if (input > 2) return input; >>>> >>>> the LOCAL.1 address is pointed to the read(), but is not changing to >>>> the >>>> input value. >>>> instead i get '168636723' for every input i give in.. >>>> >>>> anyone experienced with it ? >>>> is it a compiler bug or my problem ? >>>> >>>> Cheers, >>>> Asaf >>> >>> I'm not sure why read() is behaving like it is, but I would try using >>> scanf() instead. read() is for binary input. scanf() is for text input. >>> Are >>> you typing in values from the console or are you piping something into >>> stdin? >>> >>> -Ben >> >>input is UINT, i forgot to mention that.. sorry.. >>and i am typing into the console. >> >>Cheers, >>Asaf >> > > If you are typing at the console you need to use scanf. For example, > import std.stream; > int main() { > uint input; > stdin.scanf("%u",&input); > stdout.writefln("you typed ", input); > return 0; > } > thanks, its working now.. Cheers, Asaf |
Copyright © 1999-2021 by the D Language Foundation