Do you mean TextReader.Read and TextReader.ReadLine ?
One overload of TextReader.Read reads characters into the buffer (a char[] ), and you can specify how many characters you want to read (at most). Another reads one character, returning int , which will be -1 if you reach the end of the reader.
TextReader.ReadLine reads the whole line as a string , which does not include the line terminator.
As far as I know, endl more often used in combination with cout in C ++:
cout << "Here a line" << endl;
In .NET you should use
writer.WriteLine("Here a line")
do the same thing (for the corresponding TextWriter , or use Console.WriteLine for the console).
EDIT: Console.ReadLine reads a line of text, while Console.Read reads a single character (it is like a seamless TextWriter.Read overload).
Console.ReadLine() is basically the same as Console.In.ReadLine() , and Console.Read() is basically the same as Console.In.Read() .
EDIT: in response to your comment on another answer you cannot:
int x = Console.ReadLine();
because the return type Console.ReadLine() is a string, and there is no conversion from string to int . You can do
int x = Console.Read();
because Console.Read() returns an int . (Again, this is a Unicode code point, or -1 for "end of data.")
EDIT: if you want to read an integer from the keyboard, that is, the user enters "15" and you want to get it as an integer, you should use something like:
string line = Console.ReadLine(); int value; if (int.TryParse(line, out value)) { Console.WriteLine("Successfully parsed value: {0}", value); } else { Console.WriteLine("Invalid number - try again!"); }