我正在制作基于文本的游戏,我的输入问题很严重。这是我的问题代码的 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,但我不确定。谢谢!
答案 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()