c语言 - 我在执行 3 个 printf() 语句时遇到问题


#include <stdio.h>
int main() {

char v1,v2,v3;
printf("enter: ");
scanf("%c",&v1);
printf("enter: ");
scanf("%c",&v2);
printf("enter: ");
scanf("%c",&v3);

}

这是我的示例代码,我希望输出如下:

enter: a
enter: b
enter: c

但我得到的输出是:

enter: a
enter: enter:

第二次和第三次打印语句同时执行。

问题是你在读字符,所以如果你输入的实际上是a输入b>输入c输入,那实际上是六个字符,你读的将是前3个字符(a输入(

您可以在scanf格式中使用空格来跳过空白。如果您使用scanf(" %c", &v1);,那么任何空格(如Enter(都将被跳过,这将导致您的结果符合您的预期。但是,如果有人输入了类似空格Enter的内容,程序似乎会挂起,等待输入非空白

问题在于缓冲。阅读评论中已经提到的这个问题。

TL,DR:使用scanf(" %c", &v);读取字符,因为它忽略了缓冲区中的所有空白,以及后面的换行符。

你好,我建议您使用一个库,该库允许您使用名为get_char的函数。我用这个函数写了一个程序,可以做你想做的事情。

#include <stdio.h>
#include <string.h>
#include <cs50.h>

int main(void)
{
char v1 = get_char("enter: ");
char v2 = get_char("enter: ");
char v3 = get_char("enter: ");
}

因此,程序在一个接一个输入时存储3个字符值,而不需要同时执行所有字符值。我不知道这是否是你想要的答案,或者它是否会对你有所帮助,但我想我会把它放在那里。如果这不是你真正想要的,请告诉我!

这就是终端的样子顺便说一句:

$ make help
$ ./help
enter: a
enter: b
enter: c

最新更新