对于我的家庭作业,我们被要求从用户处获取一个字符串,并且:
我不知道我的逻辑是否错误或是否是一个简单的修复。任何建议都表示赞赏。
#include <stdio.h>
int main()
{
int i;
char sentense [30];
printf("Please enter a sentence\n");
fgets(sentense, 30, stdin);
for(i=0; sentense[i] != '\0'; i++)
{
putchar(toupper(sentense[i]));
}
for(i=0; sentense[i] != '\0'; i++)
{
putchar(tolower(sentense[i]));
}
for(i=0; sentense[i] != '\0'; i++)
{
if(sentense[i] >='65' && sentense[i] <='90')
{
putchar(tolower(sentense[i]));
}
else if(sentense[i] >= '97' && sentense[i] <='122')
{
putchar(tolower(sentense[i]));
}
else
{
}
}
return 0;
}
答案 0 :(得分:4)
您需要更改
if(sentense[i] >='65' && sentense[i] <='90')
到
if(sentense[i] >= 65 && sentense[i] <= 90)
和其他情况,因为我们想在这里比较整数值。
启用编译器警告,编译器应警告您错误。
或者,您也可以使用isupper()
/islower()
库函数。
答案 1 :(得分:4)
isupper
和islower
来阻止代码依赖于字符代码。toupper
代替tolower
将字母转换为大写字母。固定代码:
#include <stdio.h>
#include <ctype.h>
int main()
{
int i;
char sentense [30];
printf("Please enter a sentence\n");
fgets(sentense, 30, stdin);
for(i=0; sentense[i] != '\0'; i++)
{
putchar(toupper(sentense[i]));
}
for(i=0; sentense[i] != '\0'; i++)
{
putchar(tolower(sentense[i]));
}
for(i=0; sentense[i] != '\0'; i++)
{
if(isupper(sentense[i]))
{
putchar(tolower(sentense[i]));
}
else if(islower(sentense[i]))
{
putchar(toupper(sentense[i]));
}
else
{
putchar(sentense[i]);
}
}
return 0;
}
答案 2 :(得分:1)
易于理解,您应该直接比较。让我们使用:
if(sentense[i] >='A' && sentense[i] <='Z')
检查案例。并使用:
if(sentense[i] >='a' && sentense[i] <='z')
检查低位。