这个用C编写的程序没有给出正确的输出
问题描述:
这是一个将sting的字母转换成大写或小写的程序。我不知道这段代码有什么问题。当我运行它时,它省略了第一个字母。如果我给出字符串“Lets out out”,则输出为 “ETS GO OUT”(将“L”排除在外,不应该发生)转换为大写字母并且“ts out out”(“ le“被排除在外,这是不应该发生的)当转换为小写。我使用codeblocks。请有人帮助我:'(这个用C编写的程序没有给出正确的输出
#include<ctype.h>
#include<stdio.h>
int main()
{
char str[80],*p;
printf("Enter A String\n");
gets(str);
p=str;
while(*p)
*p++=toupper(*p);
printf("After uppercase conversion: %s\n",str);
p=str;
while(*p)
*p++=tolower(*p);
printf("After lowercase conversion: %s\n",str);
return 0;
}
答
你while
循环等同于下面的代码:
while (*p)
{
*p = tolower(*(p+1));
p = p+1;
}
因此,要解决这个问题,你可以使用一个for
循环例如,像这样:
#include<ctype.h>
#include<stdio.h>
int main()
{
char str[80],*p;
printf("Enter A String\n");
gets(str);
for (p = str; *p != '\0'; p++)
*p = toupper(*p);
printf("After uppercase conversion: %s\n",str);
for (p = str; *p != '\0'; p++)
*p = tolower(*p);
printf("After lowercase conversion: %s\n",str);
return 0;
}
不要使用'gets' –
在'* p ++ = tolower(* p)'这个表达式中,你认为'p'的值是否在RHS上? –