nothing is wrong, it's to do with operator overloading and the print function trying to be helpful.
if you change this line:
int incomingByte ;
to this:
char incomingByte ;
it should display correctly
andAnd the extra characters are because the software on the computer is sending line endings. these may be a linefeed with or without a carriage return. you could either just ignore them, or make use of them to create multi character commands (if you need them)
You can ignore them by:
if ((incomingByte != 10 && (incomingByte != 13))
{
Serial.print("I received: ");
Serial.println(incomingByte);
}
If you only want printable characters, check if you can use the isprint function (isprint function
so it should look like
if (isprint(incomingByte))
{
Serial.print("I received: ");
Serial.println(incomingByte);
}