我试图让我的程序打印出来:
输出应该是存储在(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);
}
}
答案 0 :(得分:1)
我试过运行你的程序,程序中有2个错误。
无论您在输入中输入什么字符串,由于行str
,所有内容都会存储在fgets(str,MAXLINE,stdin)
中,因此代码执行只会前进到下一行和getchar()
之后你按输入或 EOF 。请参阅此问题What does fgets do?了解fgets
如何工作。现在因为getchar永远不会在你的输入整个循环中工作变得无用。
上面是主要问题,删除fgets()
将允许getchar()
获取字符并且循环将起作用。另一个问题在于行else if (c >= 'a' && c <= 'a')
和行else if (c >= 'A' && c <= 'A')
,你错误地而不是z
和Z
使他们成为a
和A
,所以它不起作用。
纠正这两者你的代码会运作良好。
这是你的计划。
#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);
}