我正在尝试计算用户输入某个数字的次数,并将实例总数分配给10行数组(0-9)中的某个位置。例如,如果用户输入888
,则会将3
分配给位置arr1 [8]。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int arr1[10] = {0};
int c;
while ((c = getchar()) != '\n'){
for (int i = 0; i <= 9; i++){
if (c == i) // This isn't doing what I want it to do
arr1[i] += 1;
}
}
for (int i = 0; i <= 9; i++)
printf ("%c ", arr1[i]);
}
麻烦似乎是我在上面评论时添加的内容。行if (c == i)
用于比较用户输入的数字(因为它是用户输入的,而不是ASCII值),并将其与i
进行比较。
那么如何将c
和i
作为同一类型进行比较?我尝试将getchar()
的类型更改为char, signed int, unsigned int
,但似乎没有任何区别。
答案 0 :(得分:2)
%c
打印字符进行计数。i
,而不是希望每个字符增加1。 更正后的代码:
int main(void){
int arr1[10] = {0};
int c;
while ((c = getchar()) != '\n'){
for (int i = 0; i <= 9; i++){
if (c - '0' == i)
arr1[i] += 1;
}
}
for (int i = 0; i <= 9; i++)
printf ("%d ", arr1[i]);
}
答案 1 :(得分:1)
您必须执行以下操作才能将ASCII值转换为相应的整数
c=c-48;
在for循环中,
arr1[i] += i;
应该是,
arr1[i] += 1;
答案 2 :(得分:0)
getchar
将返回c
的ASCII码,而不是数值。最简单的解决方案利用了数字0-9在ASCII表中是顺序的事实,只是减去偏移量:
int number = getchar() - '0';
if (number == i) {
//....
}
这只是一个示例,请始终检查getchar
的错误代码的返回值。
最后,在这一行:
printf ("%c ", arr1[i]);
使用%d
作为格式说明符:您要打印数字,而不是字符。
答案 3 :(得分:0)
#include <stdio.h>
int main(void){
int arr1[10] = {0};
char table[] = "0123456789";
int c;
while ((c = getchar()) != '\n'){
for (int i = 0; i <= 9; i++){
if (c == table[i])//or table[i] --> "0123456789"[i]
arr1[i] += 1;
}
}
for (int i = 0; i <= 9; i++)
printf ("%d ", arr1[i]);
}