【问题标题】:Comparing ASCII value of input (C Program)比较输入的 ASCII 值(C 程序)
【发布时间】:2014-12-29 16:19:01
【问题描述】:

为了练习,我正在尝试创建一个程序来计算一行中每个数字、字母字符和“空白”字符的数量。

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

我相信我的主要问题在于 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;
}

以下是输出示例:

绿色字符是输入,你可能知道,它们都没有添加到它们对应的变量中。

【问题讨论】:

  • “主要问题”是什么意思?究竟什么不起作用?
  • 进行 Paul Roub 建议的更改,它会起作用。
  • 问题已解决。感谢您的快速检查和大家的帮助。
  • 嗯,你的第二个 else if 需要 &amp;&amp; 而不是 || 否则它将永远是真的!
  • @CoolGuy 是的,谢谢你的指出,我已经进行了编辑,但对于未来的读者来说,这是值得注意的。

标签: c comparison ascii


【解决方案1】:

您需要修复数字计数器:

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

这将增加CountDigits[48](对于'0')等。这不是您想要的。 a..z 是正确的;在这里做同样的事情:

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

【讨论】:

  • @Gopi,问题不是我发布的。
  • 我特别不使用它,因为我想更好地使用基本的合作者和 if/else 语句。我正在关注“The C Programming Language, 2nd Edition”一书,虽然我知道存在这些内置方法,但我想先学习基础知识。
  • @Kaiser17 Cool 有意义 ATB
猜你喜欢
  • 2023-03-16
  • 2015-07-18
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多