#include <stdio.h>
#include <conio.h>
main()
{
char ch,name[20];
int i=0;
clrscr();
printf("Enter a string:");
while((ch=getch())!='\n')
{
name[i]=ch;
i++;
}
name[i] = '\0';
printf("%s",name);
}
When I give "abc" as input and if I press enter it's not working. Can anyone let me know why the condition ch=getch() != '\n' is not becoming false when I press enter? I have also observed that ch is taking \r instead of \n. Kindly let me know. Thanks
Try \r instead of \n
\n is the new line character (0x0A) or 10 decimal, \r is the carrige return character (0x0D) or 13 decimal.
The return key is a carrige return.
on some system the newline is "\r\n" carriage return (enter) is "\r"
The keyboard return key is the carriage return, or CR. This is found by running the program and analyzing the results.
When you press enter key, the ASCII value of Enter key is not returned, instead CR is returned.
Hence
(ch=getch())!='\n'
should be changed to any of the following equivalent statements:I think it would be better to simply use:
instead of getch thing.
It depends on your system. Also you must know that getch() it's a part of the XSI Curses Standard issued by X-Open or OpenGroup and not related to the Borland specific conio.h header.
You must use getchar(3) or getc(3), which all of them belong to the ISO/IEC 9899:1990 standard. Both calls retreives just one byte from the controlling terminal/console or the input stream, respectively.
If you are calling them from a Windows platform, you retreive with the Enter key, the '\r', '\n' sequence, instead of just '\n'. Then you must create a loop arround the getchar(3) or getc(3) calls. Also, a call to fgets(3) over stdin would work to obtain the '\r', '\n' sequence.
Another point, is that some platforms needs flush the stding stream, then you must apply the fflush(3) call to the stdin stream.
fgets(3) and fflush(3) belongs to the ISO/IEC 9899:1990 standard.
An enter is actually "\r\n" (carriage return and line feed) on Windows. getchar() will return '\n' I think.