在C中跳过了scanf

时间:2017-07-11 03:10:20

标签: c input codeblocks scanning

我尝试运行以下程序:

int main(){
    char a;
    char b;
    char c;

    printf("\nenter a: ");
    scanf("%c", &a);

    printf("\nenter b: ");
    scanf("%c", &b);

    printf("\nenter c: ");
    scanf("%c", &c);

    return 0;

}

运行程序时,它会提示您输入a的值。执行此操作后,系统会提示您输入b的值,但是不允许输入值,因为程序会跳过扫描,然后再次提示您输入未跳过的c值。我可以初始化a和c,但不是b。而且我不知道为什么。我读过在scanf中使用%[^ \ n]的地方,但我尝试使用它,我不认为我正确使用它,因为它仍然无法正常工作。

这是输出(带有一些输入示例):

enter a: 1

enter b: 
enter c: 1

process returned 0 (0x0)

3 个答案:

答案 0 :(得分:0)

而不是"%c",请使用" %c"

如果没有空格,当格式说明符为%c时,scanf不会跳过空格。这最初会引起混淆,因为它会跳过其他格式说明符的空格,例如%d%f%s等。

答案 1 :(得分:0)

当您按输入时,会在输入队列中添加一个字符,然后将其读入b

你可以显式读取一个字符来忽略它,或者你可以使用(作为一种选择)%1s来读取单字符字符串(它将跳过空格,包括输入的换行符)按时输入

答案 2 :(得分:0)

'\n'后,

b成为变量enter的输入。 为了解决这个问题,请使用getchar()来处理'\n'

int main(){
    char a;
    char b;
    char c;

    printf("\nenter a: ");
    scanf("%c", &a);
    getchar();    

    printf("\nenter b: ");
    scanf("%c", &b);
    getchar();

    printf("\nenter c: ");
    scanf("%c", &c);

    return 0;

}