switch(n)中的n在n为int型和char型,在for循环中循环次数不同
(1)n为字符型:
int main()
{
char n;
int i;
for(i=0;i<2;i++){
scanf("%c",&n);
switch(n){
case '0': printf("1\n");break;
case '1': printf("2\n");break;
case '2': printf("3\n");break;
case '3': printf("4\n");break;
case '4': printf("5\n");break;
}
}
}
运行结果:输入一个数字,程序执行一次循环就会结束;
(2)n为int型:
int main()
{
int n;
int i;
for(i=0;i<2;i++){
scanf("%d",&n);
switch(n){
case 0: printf("1\n");break;
case 1: printf("2\n");break;
case 2: printf("3\n");break;
case 3: printf("4\n");break;
case 4: printf("5\n");break;
}
}
}
运行结果:可以按照for循环输入两个数字后程序结束
想问下这是什么原因导致循环次数不一样
输入第一个字符后按下回车
接下来scanf("%c",&n)会读取回车符,在后面加一句getchar()就行了
#include <stdio.h>
#include <malloc.h>
int main()
{
char n;
int i;
for(i=0;i<2;i++){
scanf("%c",&n);
getchar();
switch(n){
case '0': printf("1\n");break;
case '1': printf("2\n");break;
case '2': printf("3\n");break;
case '3': printf("4\n");break;
case '4': printf("5\n");break;
}
}
}
当n是字符型时,输入字符以后,还会多输入一个回车符,回车符被作为下一次scanf接收了。所以看起来只循环了1次。
但是当n是int类型时,回车符被忽略,所以能正常输入2次
字符类型改成这样就好了,加一个getchar()吸收缓存,不然上次输入完成后的enter会被当做字符
int main()
{
char n;
int i;
for(i=0;i<2;i++){
scanf("%c",&n);
getchar();
switch(n){
case '0': printf("1\n");break;
case '1': printf("2\n");break;
case '2': printf("3\n");break;
case '3': printf("4\n");break;
case '4': printf("5\n");break;
}
}
}