0

我正在尝试计算用户输入某个数字的次数并将实例总数分配给 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.

那么如何比较ci作为同一类型呢?我尝试将类型更改为getchar()char, signed int, unsigned int但似乎没有任何区别。

4

4 回答 4

2
  1. 你必须减去'0'。
  2. 您正在使用%cfor count 打印字符。
  3. 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]);
    }
于 2013-05-13T12:25:53.150 回答
1

您必须执行以下操作才能将 ASCII 值转换为相应的整数,

c=c-48;

在你的 for 循环中,

arr1[i] += i;

应该,

arr1[i] += 1;
于 2013-05-13T12:20:48.280 回答
0

getchar将返回 ASCII 码c,而不是数值。最简单的解决方案利用了数字 0-9 在 ASCII 表中是连续的这一事实,只需减去偏移量:

int number = getchar() - '0';
if (number == i) {
    //....
}

这只是一个示例,请始终检查getchar错误代码的返回值。

最后,在这一行:

printf ("%c ", arr1[i]);

改为%d用作格式说明符:您要打印数字,而不是字符。

于 2013-05-13T12:24:17.403 回答
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]);
}
于 2013-05-13T12:27:04.177 回答