我正在尝试在循环中使用 scanf 输入三个字符,也在 C 中的外部循环中输入三个字符,但 none 工作正常

I am trying to input three characters using scanf in loop and also outside loop in C but none is working properly

在这里,我在for循环中使用scanf输入字符,但它只需要一个字符。 整数不会发生此问题。为什么?

(1) 在循环中:-

#include <stdio.h>

int main(void) {
    char p1, p2, p3, c1, c2;
    int i, t;
    // t is the number of testcases.
    printf("Enter number of testcases : ");
    scanf("%d", &t);
    for(i = 0; i < t; i++){
        printf("Enter three characters : \n");
        scanf("%c%c%c", &p1, &p2, &p3);
        printf("Again enter characters\n");
        scanf("%c%c", &c1, &c2);
        printf("\nEnd");
    }
    return 0;
}

我只能输入两个字符。

输出:

Enter number of testcases : 2
Enter three characters : 
a
Again enter characters
s

End
Enter three characters : 
d
f
Again enter characters
g
End

(2) 没有循环 :-

 #include<stdio.h>
 int main(){
    char p1, p2, p3, c1, c2;
    int i, t;
    printf("Enter three characters : \n");
    scanf("%c%c%c", &p1, &p2, &p3);
    getchar();
    printf("Again enter characters\n");
    scanf("%c%c", &c1, &c2);
    printf("\nEnd");
    return 0;
}

输出:

Enter three characters : 
a
s
Again enter characters
d

End

在 scanf 中的格式说明符前放置一个 space。

    #include<stdio.h>
    int main(void) {
    char p1, p2, p3, c1, c2;
    int i, t;
    // t is the number of testcases.
    printf("Enter number of testcases : ");
    scanf("%d", &t);
    for(i = 0; i < t; i++){
        printf("Enter three characters : \n");
        scanf(" %c %c %c", &p1, &p2, &p3);
        printf("Again enter characters\n");
        scanf(" %c %c", &c1, &c2);
        printf("\nEnd");
    }
    return 0;
}

发生的事情是 scanf 正在标准输入中寻找 3 个字符以分配给 p1、p2 和 p3。

输入'a'和's'后,stdin有4个字符。 'a','\n','s','\n'

因此,p1 得到 'a',p2 得到 '\n',p3 得到 's'。 getchar() 删除 '\n'

然后,当您输入 'd' 时,c1 得到 'd',c2 得到 '\n'。

如果您想一次输入一个字符,那么您还需要在 scanf 中包含新行。
这样做:

    scanf("%c\n%c\n%c", &p1, &p2, &p3);
    getchar();

只需将 space 放在 scanf 中的 %c 之前。