C语言关于数组的问题

#include <stdio.h>
main()
{
char *s,c[80];
s=c;
gets(s);
while((*(++s))!='\0')
if( *s=='a') break;
else{ s++;gets(s);}
puts(s);
}

求运行结果
请简述过程,谢谢
上机答案是:at

#include <stdio.h> //载入标准输入输出库
main() //主函数,作为c程序的入口函数,从这里开始。
{
char *s,c[80]; //创建一个字符型的指针,一个字符型的数组
s=c; //将指针指向这个数组的开头。(数组名等于指向数组开头的指针)
gets(s); //从键盘获取输入到s,因为此时s指向c[],所以输入到了字符数组c中。
while((*(++s))!='\0') //将s后移一位,如果不等于'\0'进入循环
if( *s=='a') break; //如果当前s所指的位置字符为a,跳出循环
else{ s++;gets(s);} //否则s后移一位,继续获取s;
puts(s); //输出s;
}

程序分析:
此程序目的不明,好像是测试对指针和字符数组的了解,当while判断时将s后移,则s所致的位置为c[1],也就是输入串的第二位。
而在循环中判断后,将s++,然后再输入串,这时将清除原有的第二位以后的所有数据,保留原有的前两位在c[]中。
这样循环得出的结果是,每当输入单个字符时,while循环不运行,直接输出,程序结束,s值因为被自增,所以为'\0',输出为空。当输入的第二个字符为a时,结束程序因为s总是被自增到指向a或者空的位置,输出为a和后面的序列,如果是其他情况,则要求重新输入,直到输入的串的第二个字符为a,这时输出这个串从这个a开始的后面的部分。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-25
s=c; 的意思是把数组的地址给指针s,
gets(s);的意思是给c[80]赋值。因为s等于c。gets后括号加的是地址.
while((*(++s))!='\0')中的s开始值向的是c[80]中的第0个字符.*(++s)是值向下一个字符(在第一次循环是它是c[1]的意思)
if( *s=='a') break;的意思是当字符是'a'的时候结束循环,break的意思是结束
else{ s++;gets(s);} 的意思是当c[1]不等于'a'的时候在一次对c[80]赋值
最后打印这个数组
总体意思就是得到一组字符c[80]直到当c[1]等于'a'的时候打印 注意(数组是从0开始的)
例如;输入jhhkhk的时候不打印要求你在次输入直到输入*a****的时候打印.这是我自己分析的,你可以上机验证一下.如果我错了告诉我呀,谢谢
第2个回答  2008-04-25
将指针S指向数组c的头地址
接收字符,如果s指针指向的下一个元素不是结束符并且s指向的元素不是字符a,那么指针自增,接收下一个字符。
最后将字符打出来。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网