比较输入的ASCII值(C程序)

时间:2014-12-29 16:19:02

标签: c comparison ascii

对于练习我试图创建一个程序来计算一行中每个数字,字母字符和“空格”字符的数量。

我的程序打印正常但是我的计数器没有正确添加它读取的每个字符。以下是该计划的代码(我一周前才开始学习,所以请原谅任何明显的问题)。

我认为我的主要问题在于if / else if语句,我将int c与各种ASCII值进行比较。

/* Print Count of Each Char, Spaces, and Digits */

int main(void) {
    int c, i, CountWhitespace, count, Alpha;
    int CountCharacter[26];
    int CountDigits[10];

    CountWhitespace = 0;
    for (i = 0; i < 10; ++i) {
        CountDigits[i] = 0; }
    for (i = 0; i < 26; ++i) {
        CountCharacter[i] = 0; }

    while ((c = getchar()) != '\n') {
        if (c >= '0' && c <= '9') {
            ++CountDigits[c]; }
        else if (c == '\t' || c == ' ') {
            ++CountWhitespace; }
        else if (c >= 'a' || c <= 'z') {
            ++CountCharacter[( c - 'a')]; }
        else if (c >= 'A' && c <= 'Z') {
            ++CountCharacter[(c - 'A')]; }
    }
    printf("Whitespace Characters: %d\n", CountWhitespace);
    for (i = 0; i < 10; i++) {
        printf("%d appears %d times.\n", i, CountDigits[i]); }
    for (Alpha = 'a', count = 0; count < 26; count++, Alpha++) {
        printf("%c appears %d times.\n", Alpha, CountCharacter[count]); }

    return EXIT_SUCCESS;
}

以下是输出示例:

enter image description here

绿色字符是输入,正如您可能知道的那样,它们都没有添加到相应的变量中。

1 个答案:

答案 0 :(得分:4)

您需要修复数字计数器:

if (c >= '0' && c <= '9') {
  ++CountDigits[c];
}

这将是增量CountDigits[48](对于'0')等。不是你想要的。你已经适合a..z;在这里做同样的事情:

if (c >= '0' && c <= '9') {
  ++CountDigits[c - '0'];
}