hpdie 发表于 2022-5-23 11:33:54

求助

#include<stdio.h>
#include<ctype.h>

char *str_toupper(char *s)
{
    char *temp = s;
    while(*s)
    {
      *s = toupper(*s++);
    }
    return temp;
}

char *str_tolower(char *s)
{
      char *temp = s;
    while(*s)
    {
      *s = tolower(*s++);
    }
    return temp;


}
int main()
{
    char str;

    printf("请输入字符串: ");
    scanf("%s", str);

    printf("大写字母: %s\n", str_toupper(str));
    printf("小写字母: %s\n", str_tolower(str));



    return 0;
}


请问位什么运行可以输入,没有输出呢

人造人 发表于 2022-5-23 12:05:18

hpdie 发表于 2022-5-23 11:56
能问一下,我原来写的为什么不行吗?

*s = tolower(*s++);
这个代码怎么执行?


参考
副作用与顺序点:
https://fishc.com.cn/forum.php?mod=viewthread&tid=213521
https://blog.51cto.com/u_9634496/5223759

人造人 发表于 2022-5-23 11:50:28

#include<stdio.h>
#include<ctype.h>

char *str_toupper(char *s)
{
    char *temp = s;
    while(*s)
    {
      //*s = toupper(*s++);
      *s = toupper(*s);
      ++s;
    }
    return temp;
}

char *str_tolower(char *s)
{
      char *temp = s;
    while(*s)
    {
      //*s = tolower(*s++);
      *s = tolower(*s);
      ++s;
    }
    return temp;


}
int main()
{
    char str;

    printf("请输入字符串: ");
    scanf("%s", str);

    printf("大写字母: %s\n", str_toupper(str));
    printf("小写字母: %s\n", str_tolower(str));



    return 0;
}

hpdie 发表于 2022-5-23 11:56:15

人造人 发表于 2022-5-23 11:50


能问一下,我原来写的为什么不行吗?

人造人 发表于 2022-5-23 12:08:10

等于号右边的 s++ 会修改 s 的值
等于号左边使用的这个 s,应该是使用 修改之前的值还是修改之后的值?

hpdie 发表于 2022-5-26 10:15:02

人造人 发表于 2022-5-23 12:08
等于号右边的 s++ 会修改 s 的值
等于号左边使用的这个 s,应该是使用 修改之前的值还是修改之后的值?

谢谢
页: [1]
查看完整版本: 求助