我对语言(C)有些陌生,但我想做的是非常简单的imo。我确定我只是忽略了某些东西或遇到了一些逻辑错误。
正如标题所示,我希望程序要做的就是计算小写字母,大写字母和空格的数量。作为附加功能,它还将输入的小写字母转换为大写。
#include <stdio.h>
int main(void){
int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0;
printf("Please enter a phrase:\n\n");
while((iochar=getchar())!=EOF) {
if ((iochar=' ')||(iochar='\t')||(iochar='\n')){
numwhites++;
putchar(iochar);
}
else if((iochar>='0')&&(iochar<='9')) {
numdigits++;
putchar(iochar);
}
else if(('a'<=iochar)&&(iochar<='z')) {
numlower++;
putchar(iochar-32);
}
else if(('A'<=iochar)&&(iochar<='Z')) {
numupper++;
putchar(iochar);
}
else
putchar(iochar);
}
printf("%d white characters, %d digits, ",numwhites,numdigits);
printf("%d lowercase have been converted to ",numlower);
printf("uppercase and %d uppercase.\n",numupper);
printf("\n\n");
return 0;
}
答案 0 :(得分:3)
if ((iochar=' ')||(iochar='\t')||(iochar='\n'))
在这里你分配给iochar并且永远是真的。这应该是一个比较:
if ((iochar==' ')||(iochar=='\t')||(iochar=='\n'))
答案 1 :(得分:0)
请查看isupper(int c)
中定义的islower(int c)
,isspace(int c)
和ctype.h
。您也许也可以从同一文件中定义的toupper(int c)
和tolower(int c)
中受益。
另请注意Sani的答案,C中的比较为==
,而作业为=
。此外, 可以在if
语句中进行分配,这可能会产生甚至常见的错误,例如您的错误。在我看来,一个好的约定是写这样的比较:
if ('\n' == iochar)
这样,如果我打错字并写下来:
if ('\n' = iochar)
我会在编译期间遇到语法错误,而不是在运行时出现奇怪的行为。
答案 2 :(得分:0)
我认为Sani Huttenen很好地解决了你的问题。我也建议你打电话
putchar(iochar)
只有一次在你的bucle结束时...它会更清楚。