为啥switch有问题
题目:9. 统计字符输入1个正整数n,在输入n个字符,分别统计其中英文字母、空格或回车、数字字符和其他字符的个数。
我这次想用switch试试,学学用法,所以没用if...else,
我写的代码如下:
#include <stdio.h>
int main() {
int n, m;
scanf ("%d", &n);
char a;
scanf("%s", &a);
int eng = 0, spa = 0, num = 0, oth = 0;
for (m = 1; m <= n; m++) {
switch (getchar() != '\0') {
case 32:
spa = spa + 1;
break;
case 13:
spa = spa + 1;
break;
case 65 ... 90:
eng = eng + 1;
break;
case 97 ... 122:
eng = eng + 1;
break;
case 48 ... 57:
num = num + 1;
break;
default:
oth = oth + 1;
}
}
printf("%d%d%d%d", eng, spa, num, oth);
return 0;
}
你的代码有几个问题导致 switch 语句无法正常工作:
1. switch 语句的表达式应该是一个整数类型,而你使用的是getchar() != '\0' ,这个表达式返回的是一个布尔类型(true 或 false),无法匹配 case 中的整数值。你需要修改为一个整数类型的表达式。
2. case 后面的值应该是整数常量,而你使用的是字符常量。你需要使用字符的 ASCII 值来匹配。
3. 你在 for 循环中使用了getchar() ,这会导致每次循环时都会读取一个字符,而不是读取输入的字符数组。你应该使用数组a中的字符进行判断。
下面是修改后的代码:
#include <stdio.h>
int main() {
int n, m;
scanf("%d", &n);
char a;
scanf("%s", a);
int eng = 0, spa = 0, num = 0, oth = 0;
for (m = 0; m < n; m++) {
switch (a) {
case ' ':
case '\n':
spa = spa + 1;
break;
case 'A' ... 'Z':
case 'a' ... 'z':
eng = eng + 1;
break;
case '0' ... '9':
num = num + 1;
break;
default:
oth = oth + 1;
}
}
printf("%d %d %d %d", eng, spa, num, oth);
return 0;
}
这样修改后,你的代码应该可以正确统计各种字符的个数了。 在这个代码中,有以下几个问题:
1. 在 switch 语句中,使用 getchar() 函数获取字符,但是没有将获取的字符与具体的值进行比较。实际上,应该将 getchar() 函数的返回值赋值给一个变量,并将变量与具体的值进行比较。
2. 在 scanf("%s", &a) 中,&a 应该改为 a。因为 a 已经是一个指针了,不需要再取地址。
3. 在最后的输出中,应该使用空格分隔数字,而不是连接起来。
下面是修改后的代码:
#include <stdio.h>
int main() {
int n, m;
scanf("%d", &n);
char a;
scanf("%s", a);
int eng = 0, spa = 0, num = 0, oth = 0;
for (m = 1; m <= n; m++) {
char c = getchar();
switch (c) {
case ' ':
case '\r':
spa++;
break;
case 'A'...'Z':
case 'a'...'z':
eng++;
break;
case '0'...'9':
num++;
break;
default:
oth++;
break;
}
}
printf("%d %d %d %d\n", eng, spa, num, oth);
return 0;
}
在修改代码时,建议注意代码的格式和排版,以方便阅读和维护。同时,应该多进行代码测试和调试,以确保代码的正确性。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} isdkz 发表于 2023-11-2 11:15
你的代码有几个问题导致 switch 语句无法正常工作:
1. switch 语句的表达式应该是一个整数类型,而你使 ...
结果不对,运行结果(前两行输入,第三行是输出):
13
I love FishC!
2 0 0 11
--------------------------------
Process exited after 8.672 seconds with return value 0
请按任意键继续. . .
Mike_python小 发表于 2023-11-2 11:16
在这个代码中,有以下几个问题:
1. 在 switch 语句中,使用 getchar() 函数获取字符,但是没有将获取的字 ...
还是有问题欸...不会是算法就有问题吧TAT
尝试如下:
5
1 32!
0 2 2 1
--------------------------------
Process exited after 14.09 seconds with return value 0
请按任意键继续. . .
13
I love FishC!
9 3 0 1
--------------------------------
Process exited after 8.658 seconds with return value 0
请按任意键继续. . .
页:
[1]