C:scanf for char无法按预期工作

Viv*_*vek 0 c scanf char

我最近在我的电脑上运行了ac程序.它有一个for循环,其中扫描了一些char.for循环运行3次.在每次运行期间,它打印运行计数,然后扫描char d的值.该计划如下

#include<stdio.h>

int main(){
    int f;
    char d;
    for(f=0;f<3;f++){
        printf("Choice %d\n", f);
        scanf("%c", &d);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在麻烦的是,当我运行程序时,当f为1时,跳过scanf部分.现在,如果我更改代码如下

#include<stdio.h>

int main(){
    int f;
    int d;
    for(f=0;f<3;f++){
        printf("Choice %d\n", f);
        scanf("%d", &d);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在程序运行正常.并且forf循环的每次迭代都执行scanf.

这里的问题似乎是什么?我的意思是当d是int类型时它工作正常,但是当d是char类型时它不能正常工作.

Sou*_*osh 11

你必须改变

scanf("%c", &d);
Run Code Online (Sandbox Code Playgroud)

scanf(" %c", &d);
       ^
       |
Run Code Online (Sandbox Code Playgroud)

否则,scanf()将考虑先前输入的ENTER按键.

注意:

  1. ENTER按键生成a \n,这是%c格式说明符的vaild输入.在%c告诉之前添加空格scanf()以忽略所有前导空格类型的输入(包括先前存储的\n)并从中读取第一个非空白字符stdin.

  2. 对于%d格式说明符的情况,它在扫描数字输入之前消耗(并忽略)任何前导的类空格输入,因此第二种情况不会遇到任何问题.