计算C中的数字空格和其他数字

时间:2015-08-03 16:03:57

标签: c

我正在尝试从The C programming Language进行练习,我遇到了一些问题。

function people_init() {
    // create a new taxonomy
    register_taxonomy(
        'countries',
        'post',
        array(
            'label' => __( 'Countries' ),
            'rewrite' => array( 'slug' => 'countries' ),
            'capabilities' => array(
                'assign_terms' => 'edit_guides',
                'edit_terms' => 'publish_guides'
            )
        )
    );
}
add_action( 'init', 'countries_init' );

错误:

#include <stdio.h>
/* count digits, white space, others */
main()
{
    int c, i, nwhite, nother;
    int ndigit[10];
    nwhite = nother = 0;
    for (i = 0; i < 10; ++i)
        ndigit[i] = 0;
    while ((c = getchar()) != EOF)
        if (c >= ’0’ && c <= ’9’)
        ++ndigit[c - ’0’];
        else if (c == ’ ’ || c == ’\n’ || c == ’\t’)
            ++nwhite;
        else
            ++nother;
        printf("digits =");
        for (i = 0; i < 10; ++i)
            printf(" %d", ndigit[i]);
        printf(", white space = %d, other = %d\n",
            nwhite, nother);
}

5 个答案:

答案 0 :(得分:1)

这必须处理ASCII值。

例如。如果输入3作为输入

getchar()返回值为51的ascii值

所以我们的c值为51,ASCII值0为48。 所以 c-'0'= 51-48 = 3 因此您将获得表达式ndigit [3] = ndigit [3] +1,从而增加了对第3位输入进行计数的值

答案 1 :(得分:0)

功能main缺少类型(通常为intvoid)。 此外,使用花括号和缩进使您的代码更易读,从而更容易找到错误。

答案 2 :(得分:0)

很难确切地知道你想要实现的目标,但我认为这正是你想要的(正如其他人所说的那样,总是使用{},它会使代码更多更容易阅读。有技术上你不需要的时间,例如if语句之后的1个条件,但即便如此,我仍然为了可读性而这样做:

#include <stdio.h>
/* count digits, white space, others */
int main()
{
    int c, i, nwhite, nother;
    int ndigit[10];
    nwhite = nother = 0;

    for (i = 0; i < 10; ++i)
    {
        ndigit[i] = 0;
    }

    while ((c = getchar()) != EOF)
    {
        if (c >= '0' && c <= '9')
        {
            ++ndigit[c - '0'];
        }
        else if (c == ' ' || c == '\n' || c == '\t')
        {
            ++nwhite;
        }
        else
            ++nother;

        printf("digits =");
        for (i = 0; i < 10; ++i)
        {
            printf(" %d", ndigit[i]);
        }
        printf(", white space = %d, other = %d\n",
            nwhite, nother);
    };
}

答案 3 :(得分:0)

我将您的代码复制并粘贴到我的文本编辑器中然后编译它然后得到了您收到的相同错误,所以您并不孤单,这是个好消息。幸运的是,我能够解决它。问题来自这三行代码:

      if (c >= ’0’ && c <= ’9’)

      ++ndigit[c - ’0’];

       else if (c == ’ ’ || c == ’\n’ || c == ’\t’)

我能够通过更改单引号来解决此问题。例如,当我使用正确的撇号时,if循环看起来像:

    if (c >= '0' && c <= '9')

至于更正,就是这样!修复这些撇号后,您的代码应该运行完美。作为一个分离注释,当你确实编译并运行它时,查看操作系统上的EOF。在我的(Ubuntu)我使用CTRL + d。祝你好运!

答案 4 :(得分:0)

#include <stdio.h>

int main()
{
    int c, ns, nt, nn;
        ns = nt = nn =0;
    while( (c = getchar()) != EOF) {

        if ( c == ' ') {
            ++ns;
        } else if (c == '\t') {
            ++nt;
        } else if (c == '\n') {
            ++nn;
        }
  }
printf("Space: %d, Tab: %d, NewLine: %d\n\n", ns,nt,nn);
}

编译并运行程序。对于退出,请输入Ctrl-D并查看计数输入的空格,制表符和换行符。