我是c编程的新手。我想问一下这个功能是否正常,
因为我不知道如何在main
中查看此内容。
char uppertolowertoupper(char ch)
{
if (ch>='A' && ch<='Z')
{
ch=tolower(ch);
return ch;
}
else if (ch>='a' && ch<='a')
{
ch=toupper(ch);
return ch;
}
答案 0 :(得分:2)
它似乎对您有用,但肯定可以改进。
return statement
)。ch>='a' && ch<='z'
不仅包含字母字符,而且ch>='A' && ch<='Z'
包含类似内容...我建议使用{ {1}}和isupper
代替。islower
和tolower
期望toupper
类型的参数。您的int
参数将转换为char
,但除此之外还有更多...参数应该是int
值或unsigned char
。其他任何内容都是未定义的行为,这意味着您传递给这些函数的任何签名字符值都可能导致段错误(例如this question)。我建议更改此函数,使其接受EOF
参数(而不是unsigned char
参数)并返回char
。答案 1 :(得分:1)
错误(可能是拼写错误):
else if (ch>='a' && ch<='a')
这应该是:
else if (ch>='a' && ch<='z')
其次,要在main中调用函数,这样的东西就足够了:
char ch;
ch=uppertolowertoupper('c');
printf("%c",ch);
只有在main
之前声明或定义了函数时,上述方法才有效。
在main之前声明:
char uppertolowertoupper(char);
int main()
{
char ch;
ch=uppertolowertoupper('c');
printf("%c",ch);
}
char uppertolowertoupper(char ch)
{
// your function
}
在main之前定义:
char uppertolowertoupper(char ch)
{
if (ch>='A' && ch<='Z')
{
ch=tolower(ch);
return ch;
}
else if (ch>='a' && ch<='z')
{
ch=toupper(ch);
return ch;
}
}
int main(){
char ch;
ch=uppertolowertoupper('c');
printf("%c",ch);
return 0;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <ctype.h>
char uppertolowertoupper(char ch){
if (ch>='A' && ch<='Z'){//if(isupper(ch)){
ch=tolower(ch);
return ch;
} else if (ch>='a' && ch<='z'){//if(islower(ch)){
ch=toupper(ch);
return ch;
}
}
int main(void){
char test[] = "abcdefghijklmnopqrstrvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.?!";
puts(test);
for(char *p = test; *p ; ++p)
putchar(uppertolowertoupper(*p));
return 0;
}