gpt4 book ai didi

c - C 中字母的大小写反转

转载 作者:行者123 更新时间:2023-11-30 20:46:21 25 4
gpt4 key购买 nike

好的,所以我被要求使用函数 inver_caps 反转 C 中的大小写。我的函数可以正常工作并正确打印新字母,但我无法理解为什么它不能正确打印?

有什么想法吗?

void invert_caps (char letter);
int main(void){

char lettermain;

printf("Enter a letter: ");
scanf(" %c", &lettermain);

invert_caps(lettermain);

printf("The invert of the letter is %c \n", lettermain);

system("PAUSE");
return 0;
}

void invert_caps (char letter){

printf("\nletter is %d\n",letter); /*this was used for debugging*/

if ((int)letter >=65 && (int)letter<=90){

letter = (int)letter+32;
}else{

letter = (int)letter - 32;
}

printf("\nnew letter is %d or %c\n",letter, letter); /*this was used for debugging*/
return letter;

}

最佳答案

您正在执行按值传递(复制值),这并不反射(reflect)在调用方函数调用时所做的更改。做

(1) 通过指针传递(传递地址),或者
(2) 只需从函数返回转换后的值。

旁注:不要在代码中使用 ascii 值,只需使用 char 常量来保持代码可读(您不必记住 ascii 值)。例如,我为你写了(2)解决方案(我相信这对你来说现在很容易,在这个阶段避免指针)。

要理解代码,请阅读注释:

 char invert_caps (char letter){
// ^ added return type, its not void now
if ( letter >= 'A' && letter<= 'Z'){ // not using ASCII value but char Constants
letter = letter + ('a' - 'A'); // its more readable
// Note 32 = 'a' - 'A' that is 97 - 54
}
else {
if ( letter >= 'a' && letter<= 'z'){// Add this case, to be safe is good practice
letter = letter - ('a' - 'A');
}
else
letter = '\0'; // if letter is neither Upper or lower alphabetic case
} // then convened it into nul symbol (exception case)
return letter; // added a line
}
// I removed unnecessary typecasts and debug statements

在 main() 中,您需要像在同一位置一样调用它:

lettermain = invert_caps(lettermain);
// ^ return value assigned to variable `lettermain`

return是 C 语言中的一个关键字。 return语句终止函数的执行并将控制权返回给调用函数。 return 语句还可以向调用函数返回一个值,并且从函数 invert_caps() 我们返回转换后的值。

关于c - C 中字母的大小写反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com