该程序仅执行“strlen”功能。
这个while循环中的if语句甚至无法工作...
#include<stdio.h>
#include<string.h>
#include <ctype.h>
main()
{
char cMessage[100];
int cLow = 0, cUp = 0, cSpec = 0, cSpace = 0, cNum = 0;
printf("Enter your message: ");
scanf("%s", cMessage);
int x = 0;
while(cMessage[x] != 0)
{
x = strlen(cMessage);
printf("Total characters: %d", x);
if(islower(cMessage[x]))
{
printf("\nTotal Lowercase Letters: %d", cLow);
cLow++;
}
else if(isupper(cMessage[x]))
{
printf("\nTotal Uppercase Letters: %d", cUp);
cUp++;
}
else if(isalnum(cMessage[x]))
{
printf("\nTotal Special Characters: %d", cSpec);
cSpec++;
}
else if(isspace(cMessage[x]))
{
printf("\nTotal Lowercase Letters: %d", cSpace);
cSpace++;
}
else if(isdigit(cMessage[x]))
{
printf("\nTotal Lowercase Letters: %d", cNum);
cNum++;
}
}
x++;
}
我无法弄清楚这个问题的原因...
这可能是什么原因?
编辑:所以这是程序的修改后的代码,我现在唯一的问题是没有计算空格。顺便说一句,是否有用于“计数”特殊字符的特定功能?我使用过“isalnum”,但我意识到这是错误的
#include<stdio.h>
#include<string.h>
#include <ctype.h>
#include<conio.h>
main(){
char cMessage[100];
int cLow=0, cUp=0, cSpec=0, cSpace=0, cNum=0;
printf("Enter your message: ");
scanf("%s", cMessage);
int x=0;
while(cMessage[x]){
printf("Total characters: %d", strlen(cMessage));
while(cMessage[x]!=0){
if(islower(cMessage[x])){ cLow++;}
if(isupper(cMessage[x])){ cUp++;}
if(isalnum(cMessage[x])){ cSpec++; }
if(isspace(cMessage[x])){ cSpace++; }
if(isdigit(cMessage[x])){ cNum++; }
x++;
}
printf("\nTotal Lowercase Letters: %d", cLow);
printf("\nTotal Uppercase Letters: %d", cUp);
printf("\nTotal Special Characters: %d", cSpec);
printf("\nTotal Spaces: %d", cSpace);
printf("\nTotal Numbers: %d", cNum);
getch();
}
}
最佳答案
x = strlen(cMessage);
将为您提供cMessage
的长度,该长度始终是最后一项的索引+ 1。
例如,如果:cMessage = "The"
和x = strlen(cMessage)
,则:
x = 3
cMessage[0] = 'T'
cMessage[1] = 'h'
cMessage[2] = 'e'
cMessage[3] = NULL terminator // equivalence to 0
请注意,最后一个字符后通常会有一个NULL终止符。
如您所见,while条件始终是第一遍之后的
false
。尝试使用单独的变量遍历
cMessage
。另外,您还需要考虑放置诸如
cUp++' before the 'printf
语句之类的变量。一个更优雅的替代方法是使用
for
语句代替while
。还要注意
isalnum(cMessage[x])
会干扰if(isdigit(cMessage[x]))
,因此,最好使用单独的if语句和git摆脱else if
,此外,如果要计算特殊字符,则必须将isalnum
取反为:if(!isalnum(cMessage[x]))
。最后,您的输入将不接受句子(单词之间带有空格),因此您必须考虑替换:
scanf("%s", cMessage);
与
scanf("%[^\n]s",&cMessage);
关于c - 如果语句在while循环中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50198971/