C程序添加个别数字,小写和大写字母以及其他字符

时间:2017-02-05 18:59:46

标签: c

我试图让我的程序打印出来:

  • 计算每个数字(0-9)
  • 计算每个字母(a-z和A-Z)
  • 任何其他类型角色的总数

输出应该是存储在(10 + 26 + 26 + 1 =)63个计数器中的值 问题是:计算各种英文字母(小写和大写)的数量。还要计算总字符数。

我的教授并没有真正的帮助,因为他们从未真正参与其中;他们只是假设我们马上知道C并且在电子邮件中没有反应。 对所有其他人感到抱歉,因为我是这个网站的新手并且正在努力学习。谢谢你的耐心等待。

    #include<stdio.h>
    #define MAXLINE 1000
    main()
    {
    char str [MAXLINE];
    int ndigit, nlower, nupper, nother;
    int c;
    printf("Enter any text with numbers or other characters if you like: ");
    fgets(str,MAXLINE,stdin);
    ndigit = nlower = nupper = nother = 0;

    while ((c = getchar()) != EOF)
    {
            if (c >= '0' && c <= '9')
                    ++ndigit;
            else if (c >= 'a'  && c <= 'a')
                    ++nlower;
            else if (c >= 'A' && c <= 'A')
                    ++nupper;
            else
                    ++nother;
    }
            printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother);
    }
}

1 个答案:

答案 0 :(得分:1)

我试过运行你的程序,程序中有2个错误。

  1. 无论您在输入中输入什么字符串,由于行str,所有内容都会存储在fgets(str,MAXLINE,stdin)中,因此代码执行只会前进到下一行和getchar()之后你按输入 EOF 。请参阅此问题What does fgets do?了解fgets如何工作。现在因为getchar永远不会在你的输入整个循环中工作变得无用。

  2. 上面是主要问题,删除fgets()将允许getchar()获取字符并且循环将起作用。另一个问题在于行else if (c >= 'a' && c <= 'a')和行else if (c >= 'A' && c <= 'A'),你错误地而不是zZ使他们成为aA,所以它不起作用。

  3. 纠正这两者你的代码会运作良好。

    这是你的计划。

    #include<stdio.h>
    #define MAXLINE 1000
    main()
    {
    char str [MAXLINE];
    int ndigit, nlower, nupper, nother;
    char  c;
    printf("Enter any text with numbers or other characters if you like: ");
    fgets(str,MAXLINE,stdin);     //What Really Happens is whatever you are
                                  //inputting is getting stored into the char array str
                                  //Only after you press enter or EOF then
                                  // execution move forward to getchar().
      //So you type the whole string and then it all get stored in str and then 
      //comes no output because getchar never executes.
    
    ndigit = nlower = nupper = nother = 0;
    
    while ((c = getchar()) != '\n')  
    {
            if (c >= '0' && c <= '9')
                    ++ndigit;
            else if (c >= 'a'  && c <= 'a') //Change To (c>='a' && c<='z')
                    ++nlower;
            else if (c >= 'A' && c <= 'A')  //Change To (c>='A' && c<='Z')
                    ++nupper;
            else
                    ++nother;
    
    
    }
            printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother);
    }
    

    更改代码后变为。

    #include<stdio.h>
    #define MAXLINE 1000  //Redundant Line As You Are No Longer Using fgets.
    int main()            //Changed to int main()
    {
    
    char str [MAXLINE];   //Redundant Line As You Are No Longer Using fgets.
    int ndigit, nlower, nupper, nother;
    char  c;
    printf("Enter any text with numbers or other characters if you like: ");
    ndigit = nlower = nupper = nother = 0;
    
    while ((c = getchar()) != '\n')
    {
            if (c >= '0' && c <= '9')
                    ++ndigit;
            else if (c >= 'a'  && c <= 'z')
                    ++nlower;
            else if (c >= 'A' && c <= 'Z')
                    ++nupper;
            else
                    ++nother;
    
    
    }
            printf("Digits : %d Lowercase Letters %d Uppercase Letters %d Other characters %d\n", ndigit, nlower, nupper, nother);
    }