输入问题scanf()/ getchar()

时间:2014-11-01 19:03:14

标签: c scanf getchar

我正在制作基于文本的游戏,我的输入问题很严重。这是我的问题代码的 small 示例。

#include <stdio.h>
#include <stdlib.h>

char c;

int main(int argc, char *argv[]){

    system("clear");

    while(1){
        printf("\nInput a character.\n");
        c = getchar();
        printf("\nYour input: %c\n", c);
        sleep(1);
        system("clear");
    }

    return 0;
}

因此,如果你编译/运行它,并输入'abc',它将只取每一个,并通过循环发送它。我需要它做的只是取一个人键入的第一个字符,无论他们输入多少。

并且,PS:我已经尝试过这种方式了,它做了同样的事情:

#include <stdio.h>
#include <stdlib.h>

char c[2];

int main(int argc, char *argv[]){

    system("clear");

    while(1){
        printf("\nInput a character.\n");
        scanf("%1s", c);
        printf("\nYour input: %c\n", c[0]);
        sleep(1);
        system("clear");
    }

    return 0;
}

编辑:它还为你输入的内容添加了一个空格,我认为它是一个\ 0,但我不确定。谢谢!

5 个答案:

答案 0 :(得分:1)

当您使用scanf时,输入一个字符串并点击ENTER键,字符串和一个字符放在输入缓冲区中,它们是:输入的字符串和换行符。字符串或字符由scanf消耗,但换行符保留在输入缓冲区中,除非您也使用它。

getchar(),另一方面不会等待ENTER键,它会逐个字符地读取,然后是你的逻辑。

答案 1 :(得分:0)

使用不等待换行符的getch()

答案 2 :(得分:0)

我认为你可以再添加1行来读取第一行之后的所有字符,直到有换行符(即用户按Enter键):

while (getchar() != '\n');

添加到您的示例中,它将是这样的:

#include <stdio.h>
#include <stdlib.h>

char c;

int main(int argc, char *argv[]){

system("clear");

while(1){
    printf("\nInput a character.\n");
    c = getchar();
    printf("\nYour input: %c\n", c);
    sleep(1);
    system("clear");
    while (getchar() != '\n');
}

return 0;
}

答案 3 :(得分:0)

我认为您所寻找的是类似于此代码的内容,为了保存第一个字符,您还可以检查c == '\n'是否继续您的操作,但我不这样做保存第一个字符后知道你想要什么:

 int i,c;
char save;
for ( i = 0;(c=getchar())!= EOF ; i++)
{
    if ( i == 0)
        save = c;
}

答案 4 :(得分:0)

您可以使用char ch[2], c; fgets(ch, 2, stdin); c = ch[0]; ,并提取其第一个字符,例如......

GoogleMaps.loaded()