使用switch-case结构来计算键入数字的次数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用switch-case结构来计算键入数字的次数相关的知识,希望对你有一定的参考价值。
创建一个C程序,计算每个数字0-4
被输入的次数。使用switch
-case
结构。使用default
计算其他字符的数量。打印键入特定数字的次数。
这是我的代码:
int main()
{
int a;
int num_0 = 0;
int num_1 = 0;
int num_2 = 0;
int num_3 = 0;
int num_4 = 0;
int num_other = 0;
printf("Input something
");
while ((a = getchar()) != EOF)
{
switch (a)
{
case 0:
num_0++;break;
case 1:
num_1++;break;
case 2:
num_2++;break;
case 3:
num_3++;break;
case 4:
num_4++;break;
default:
num_other++;break;
};
}
printf("0 has been typed %d", num_0);printf(" times
");
printf("1 has been typed %d", num_1);printf(" times
");
printf("2 has been typed %d", num_2);printf(" times
");
printf("3 has been typed %d", num_3);printf(" times
");
printf("4 has been typed %d", num_4);printf(" times
");
printf("other characters have been typed %d", num_other);printf(" times
");
return 0;
}
无论我输入什么,包括0,1,2,3,4
在内的所有数字都算作其他字符。有人能告诉我为什么我的代码不起作用。
switch (a)
将比较a
的代码。如果你输入数字,它应该是;
case '0':
num_0++;break;
case '1':
num_1++;break;
...
切换字符值不是整数(0
的int值不是0,例如在ASCII中它是48,但是我们不直接使用该值,所以它是完全可移植的)
也许更好的办法是创建一个表:
int count[10] = {0};
....
a -= '0'; // removes the offset
if ((a >= 0) && (a < 10)) // check bounds
{
count[a]++;
}
你的答案是在man getchar(强调我的)
fgetc()
从流中读取下一个字符并将其作为unsigned char
强制转换为int
,或者在文件末尾或错误时返回EOF
。
getc()
等同于fgetc()
,除了它可以实现为一个不止一次评估流的宏。
getchar()
相当于getc(stdin)
。
之后,角色的数字表示不必与字符值相同(并且大多数情况下不是),即字符0
('0'
)不具有0
,in ASCII encoding的数值,它具有小数值48
。
所以,要计算一个字符'0'
,你应该将case
值设置为'0'
,而不是0
。
a = getchar()
在读取字符时,存储在变量中的值是ASCII值。键入1时,存储在a中的值为49。
switch (a)
{
case 1:
num_0++;
break;
}
在此代码中,您将与ASCII值49(ASCII值为1)进行比较,ASCII值为1,比较返回false。同样,所有条件都给出了错误并转到默认情况。
您的代码中存在一些错误。
1)您通过getchar()函数获取输入,因此它在输入中需要字符。
2)将输入变量'a'作为char而不是int。
3)在案例选项中标记单引号,例如案例'1',因为您将输入作为字符,因此您必须标记单引号。
以上是关于使用switch-case结构来计算键入数字的次数的主要内容,如果未能解决你的问题,请参考以下文章
PythonStudy——Python 中Switch-Case 结构的实现