帮我解释一下这道C语言的编程题目????

来源:百度知道 编辑:UC知道 时间:2024/05/19 00:09:37
程序填空:从键盘输入字符串,以回车结束.通过指针操作,将所有大写字母转换为小写字母,其它字符不变,请填空.
#include <stdio.h>
main()
{int i=0;
char s[80],*p;
printf("INPUT STRING:\n");
while((s[i]=getchar())___'\n') /*$BLANK1$*/
i++;
p=s;
while(___!='\n') /*$BLANK2$*/
{if(*p>='A'&&*p<='Z')
*p=*p___; /*$BLANK3$*/
p++; }
printf("%s",s); }
该题目一共有三个空,我是这样填写的:
(1)!=
(2)*p
(3)+32
这个题目是C语言上机模拟题中的,提交答案后,也显示正确.但是有一个疑问,就是最后一句输出字符串s的打印语句,能用%s来输出是不是题中使用’\n’作为字符串的结束标识符也是可以的啊?是不是还可以用别的字符代替’\0’呢?另外就是说,假设就按照题中的方法输出,当输入"aBcZ#F"后,除了输出想要的”abcz#f”之外,换行后还有一些奇怪的字符显示在后面?(因为对照S[80]数组中的随机内容的显示,应该不是那些奇怪的字符)那么这里的'\n'到底能不能作为字符串的结束标识符来取代’\0’呢?显示出来的奇怪字符序列又是什么?什么时候结束输出?请大家帮我解释一下.谢谢,最好能详细一些,能在机器上运行当然最好了.

首先,字符串必须以\0结束而不能以\n之类的结束.\n作为换行处理
换行后出的奇怪字符是因为你定义s[80]时没有初始化,系统给s[80]分配一段空间,里面的内容是不确定的;有的编译器可能会自动初始化的.
如你定义时char s[80] = {0}就不会出现这种情况了.
遇到'\0'就结束,s[80]实际上有81个字节,最后一个是'\0';
如你在p=s; 前加一句s[10] = '\0';那么无论你输入多少字符都只输出10个

/*我上机没有出现什么东东,正常啊@*/
while((s[i]=getchar())___'\n') /*$BLANK1$*/
一定要\n要不然会死循环
while(*p!='\0') /*$BLANK2$*/
可以\0
s[80]="aBcZ#F\n"
s[80]=aBcZ#F\n\0
已经是这样的

作业自己做!