simple console input's not working...

Mike Parker aldacron at
Fri Jun 6 03:47:14 PDT 2008

SodiumFree wrote:
> So i copy this code, pretty much straight from the book (page 139):
> module inputTest;
> import;
> void main(){
>     Cout("What is your name? ").flush;
>     auto name = Cin.readln;
>     Cout("Hello ")(name).newline;
> }
> However when i try compiling, dmd spits out this error:
> C:\d.stuff\inputTest>dmd inputTest.d
> inputTest.d(6): function (char[],bool) does not match parameter types ()
> inputTest.d(6): Error: expected 2 arguments, not 0
> inputTest.d(7): function alias (char[]) does not match parameter types (bool)
> inputTest.d(7): Error: expected 0 arguments, not 1
> Any idea what's going on?

Cin.readln (which is the method 
expects at least one argument -- a string in which to store the input. 
You've given it nothing. The compiler reports this in the first error, 
then keeps on compiling.

Second, 'name' is automatically inferred as a bool and not as a string 
as you seem to intend it to be. You'll see in the documentation that 
readln returns true if input is read and false if not. So the compiler 
sees you trying to pass a bool value in the call to Cout when it expects 
a string, resulting in the second error.

A look at the source for should make the error messages 
more clear. Console is a struct with the inner classes Input and Output. 
Cin is an instance of Console.Input. Hence the (char[],bool) in the error string. 
In Console.output, the append method is aliased to opCall. That's what 
allows the COut()() syntax. It also is the reason you see (char[]).

Your corrected code:


void main()
     Cout("What is your name? ").flush;
     char[] name;
         Cout("Hello ")(name).newline;

More information about the Digitalmars-d-learn mailing list