Why doesn't pressing enter return '\n'

2019-01-15 03:17发布

#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

标签: c input
9条回答
狗以群分
2楼-- · 2019-01-15 03:39

The actual meaning of \n is \r+\n. getch() function reads a character from the keyboard.
It does not echo it and does not wait for next character.
So whenever we enter \n character getch() function reads \r character only.

查看更多
地球回转人心会变
3楼-- · 2019-01-15 03:46

That is because the return key on your keyboard is represented internally as '\r' not '\n'. In order for that specific example to work, you would need to trap '\r' instead.

查看更多
等我变得足够好
4楼-- · 2019-01-15 03:49

Use '\r' and terminate your string with '\0'.

Additionally, you might try to use getche() to give a visual echo to the user and do some other general corrections:

#include <stdio.h>
#include <conio.h>

#define MAX_NAME_LENGTH 20

int main()
{
    char ch, name[MAX_NAME_LENGTH];
    int i=0;
    clrscr();
    printf("Enter a string:");
    while ( ((ch=getche())!='\r') && (i < MAX_NAME_LENGTH - 1) )
    {
        name[i]=ch;
        i++;
    }
    name[i] = '\0';
    printf("%s\n",name);

    return 0;
}
查看更多
登录 后发表回答