-5

我是 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;
    }
4

3 回答 3

2

它可能看起来对您有用,但肯定可以改进。

  • 首先,它是不完整的。你return statement最后缺少一个括号(和一个)。
  • 其次,并非所有 C 实现都使用 ASCII。如果您要在以 EBCDIC 为字符集的系统上使用此代码,您会发现它不仅ch>='a' && ch<='z'包括字母字符,而且类似 for ch>='A' && ch<='Z'... 我建议使用isupperandislower代替。
  • 最后,tolower期望toupper类型为 的参数int。您的char参数将被转换为,int但除此之外还有更多...参数应该是unsigned charvalues 或EOF. 其他任何事情都是未定义的行为,这意味着您传递给这些函数的任何有符号字符值都可能导致段错误(例如这个问题)。我建议更改此函数,以便它接受一个unsigned char参数(而不是一个char参数)并返回一个unsigned char.
于 2015-05-31T13:59:45.213 回答
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;
}
于 2015-05-31T14:14:08.173 回答
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;
}
于 2015-05-31T14:25:44.960 回答