一个简单的C语言问题,帮忙解释一哈,先谢谢了!!

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:24:17
#include<stdio.h>
int change(char*c,int fg)
{
if(*c==' ')
L1:return 1;
else
if(fg&&*c<='z'&&*c>='a')
*c+='A'-'a';
return(0);
}
void main()
{
int flag=1;
char ch;
do
{
ch=getchar();
flag=change(&ch,flag);
putchar(ch);
}
while(ch!='\n');}
各位网友帮我看看上面的这个程序,
当输入This is a book!时,为啥结果是This Is A Book!
我觉得是THIS IS A BOOK!请网友帮我解释一哈,详细说一哈程序运行的具体
环节!!!
还有L1:return 1表示啥意思???
小弟先在此谢谢了!!!

L1: 为标签,留给goto用的,可以忽略之
因为change函数,每次传入非空格字母时,返回0,设置flag为0,下次输入字母时,第二个if不成立(因为fg==0).传入空格后设置flag为1,再输入字母时,第二个if成立,小写换成大写。所以,每次空格后第一个小写字母转换成大写,同时由于flag置为0,后面的字母不再转换,直到有新的空格。往复循环。

1。输入电脑是运行一下就知道结果
上面的程序有问题:
要修改成下面那样才能运行
#include <stdio.h> //stdio.h文件应该<> 自己写的.h文件才用""
int change(char *c,int fg)
{
if(*c==' ')//这里少了个空格
L1: return 1;
else
if(fg && *c<='z'&& *c>='a')
*c+='A'-'a';
return 0;
}
void main() //这个函数名不能错
{
int flag=1;
char ch;
do
{
ch=getchar();
flag=change(&ch,flag);
putchar(ch);
}
while(ch=!'\n');
}
2.return 0;return 1的意思不是独立的.看分别执行了什么代码,return 1时怎么都没做,return 0时
if(fg && *c<='z'&& *c>='a')
*c+='A'-'a';
return 0;这里把小写转成大写

return 1的等效返回问题应该看调用它的程序是怎么判断的,但是至少不能跟其它的返回值一样。这里调用程序没有