使用getchar()存储一个值以与整数进行比较

时间:2013-05-13 12:17:34

标签: c

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

答案 0 :(得分:2)

  1. 你必须减去'0'。
  2. 您正在使用%c打印字符进行计数。
  3. 您在循环中按计数增加i,而不是希望每个字符增加1。
  4. 更正后的代码:

        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]);
}