我正在尝试在循环中使用 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
之前。
在这里,我在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
之前。