计算没有数组的文本中的元音(C)
我必须编写一个程序,计算文本中的所有元音,并给出整个文本中每个元音的百分比。 无论出于何种原因,我们都不允许使用数组,但应该使用getchar()来实现计算没有数组的文本中的元音(C),c,C,我必须编写一个程序,计算文本中的所有元音,并给出整个文本中每个元音的百分比。 无论出于何种原因,我们都不允许使用数组,但应该使用getchar()来实现 #包括 #包括 int main(){ 电流; int cntAll=0; int cntA=0,cntE=0,cntI=0,cntO=0,cntU=0; int pA=0,pE=0,pI=0,pO=0,pU=0; printf(“输入文本:”); 而((current=getchar())!=EOF){ if(isspace(current)
#包括
#包括
int main(){
电流;
int cntAll=0;
int cntA=0,cntE=0,cntI=0,cntO=0,cntU=0;
int pA=0,pE=0,pI=0,pO=0,pU=0;
printf(“输入文本:”);
而((current=getchar())!=EOF){
if(isspace(current))continue;//如果空格继续,请检查空格
否则{
开关(当前){//检查元音和增加元音计数
案例“a”:
cntA+=1;
案例“A”:
cntA+=1;
案例“e”:
cntE+=1;
案例“E”:
cntE+=1;
案例“i”:
cntI+=1;
案例“I”:
cntI+=1;
案例“o”:
cntO+=1;
案例“O”:
cntO+=1;
案例“u”:
cntU+=1;
案例“U”:
cntU+=1;
}
}
cntAll++;
}
pA=(cntA/cntAll)*100;
pE=(cntE/cntAll)*100;
pI=(cntI/cntAll)*100;
pO=(cntO/cntAll)*100;
pU=(cntU/cntAll)*100;
printf(“\n字母:%d\n百分比A:%d\n百分比E:%d\n百分比I:%d\n百分比O:%d\n百分比U:%d\n”,cntAll、pA、pE、pI、pO、pU);
系统(“暂停”);
返回0;
}
增加cntAll值没有问题,但无论出于何种原因,它都不会计算单个元音。
非常感谢您的帮助
编辑:
#include <stdio.h>
#include <ctype.h>
int main() {
int current;
int cntAll = 0;
int cntA = 0, cntE = 0, cntI = 0, cntO = 0, cntU = 0;
double pA = 0, pE = 0, pI = 0, pO = 0, pU = 0;
printf("Enter Text: ");
while ((current = getchar()) != EOF){
if (isspace(current)) continue;
else {
switch (current) {
case 'a':case 'A':
cntA += 1;
break;
case 'e':case 'E':
cntE += 1;
break;
case 'i':case 'I':
cntI += 1;
break;
case 'o':case 'O':
cntO += 1;
break;
case 'u':case 'U':
cntU += 1;
break;
}
}
cntAll++;
}
pA = 100.0 * cntA / cntAll;
pE = 100.0 * cntE / cntAll;
pI = 100.0 * cntI / cntAll;
pO = 100.0 * cntO / cntAll;
pU = 100.0 * cntU / cntAll;
printf("\nLetters: %d\nPercentage A: %.2lf\nPercentage E: %.2lf\nPercentage I: %.2lf\nPercentage O: %.2lf\nPercentage U: %.2lf\n",cntAll,pA,pE,pI,pO,pU);
system("PAUSE");
return 0;
}
#包括
#包括
int main(){
电流;
int cntAll=0;
int cntA=0,cntE=0,cntI=0,cntO=0,cntU=0;
双pA=0,pE=0,pI=0,pO=0,pU=0;
printf(“输入文本:”);
而((current=getchar())!=EOF){
如果(isspace(当前))继续;
否则{
开关(电流){
案例“a”:案例“a”:
cntA+=1;
打破
案例“e”:案例“e”:
cntE+=1;
打破
案例“i”:案例“i”:
cntI+=1;
打破
案例“o”:案例“o”:
cntO+=1;
打破
案例“u”:案例“u”:
cntU+=1;
打破
}
}
cntAll++;
}
pA=100.0*cntA/cntAll;
pE=100.0*cntE/cntAll;
pI=100.0*cntI/cntAll;
pO=100.0*cntO/cntAll;
pU=100.0*cntU/cntAll;
printf(“\n字母:%d\n百分比A:%.2lf\n百分比E:%.2lf\n百分比I:%.2lf\n百分比O:%.2lf\n百分比U:%.2lf\n”,cntAll、pA、pE、pI、pO、pU);
系统(“暂停”);
返回0;
}
干杯您需要在案例之间插入
break
语句
否则,程序将执行第一次输入的语句下面的所有语句。实际上这是一个很好的特性。它允许您同时考虑多个标签。把这些放在一起,你会得到:
switch (current){
case 'a': case 'A':
cntA += 1;
break; // Don't follow through to the other cases.
case 'b': case 'B': /*etc*/
在此之后,请注意(cntA/cntAll)*100
将计算整数算术中括号中的表达式,在大多数情况下,该表达式将截断为0。解决办法是把它写成
pA = (cntA * 100 ) / cntAll;
100*cntA/cntAll代码>
这仍将截断为整数。如果这是不可容忍的,那么考虑使用浮点表达式<代码> 100 *CNTA/CNALTHOT/CODE >并相应地更改<代码> Prtff < /Calp>格式化程序。不管怎样,使用浮点可以说是更好的,因为在计算100*cntA
case
时,它避免了溢出的可能性,标签在不中断的情况下从下一个标签掉落
因此,如果您读取一个'a'
,那么开关中的所有案例都将被执行
你需要像这样的东西
switch (current) { // check for vowel & increase vowelcount
case 'a':
cntA += 1;
break; // <-- Note break here
...
开关(当前){//检查元音并增加元音计数
案例“a”:
cntA+=1;
break;//我注意到的第一件事是,每个开关箱上都缺少break
。这将导致错误行为。
第二件事:
pA = (cntA / cntAll) * 100;
将首先计算cntS/cntAll
,这是您忘记了案例之间的中断;
。您的所有变量都是整数,因此除法将是整数除法。百分比可能最好以浮点形式完成(您可以使用printf
将其格式化为整数)。好像是家庭作业。我猜我有点笨,完全忘记了。谢天谢地,有点仓促行事。@Bathsheba编辑了这篇文章,介意看一下吗?它仍然只输出0.00’s您的printf
格式设置程序不正确:第一个是int
。非常感谢您的帮助;)
pA = (cntA * 100 ) / cntAll;