有以下函数
#include <sthio.h>
main()
{ char a[20],b[20],c[20];
scanf(”%s%s”,a,b);
gets(c);
printf(”%s%s\n”,a,b,c);
}
程序运行时从第一行开始输入 this is a cat!<回车>,则输出结果是
A thisisacat! B this is a C thisis a cat! D thisisa cat!
我认为 ,当遇到第一个空格,算是把This给了a,遇到第二个空格算是把is给了b,最后把a cat!给了c,输出应该是thisisa cat!请问为什么输出时以ab c的形式输出,答案为C,求详解
第一,应该是
printf("%s%s%s\n",a,b,c);才有答案
第二,数组c中的内容应该是" a cat!",注意a的前面有一个空格,gets可以接收空格的,而scanf中的%s不接收空格
追问不好意思,这是复制过来的,请看一下 刘文正粉丝 的回答中,我的问题 ,谢谢
scanf() 接收字符串时候,可以理解为按照位来接收,
比如:是字符串abc d,接收当前a时候判断b是否是空格
要是b不是空格,则移动到b,在判断b的下一位c
是不是空格,依然不是,移动到c,在判断
c的下一位是不是空格,是。则表示c和c之前的属于
同一个字符串。这时候,注意也就是说,
判断结束时候,还是有个空格的。
#include <stdio.h>可以使用该函数验证,输入this is a cat!
scanf("%s%s",a,b); //接收了this,空格处理,is,
getchar();//接收了空格;
gets(c);接收了a cat!
追问你意思是空格也包含第一个字符串里了?那答案不成b了?
追答你看看我的分析
输入this is a cat!
scanf("%s%s",a,b); //接收了this,空格处理作为判断下个字符要开始的条件一直到非空格作为下个字符开始,is,
getchar();//接收了空格;
gets(c);接收了a cat!
你可以是用this is a cat!
验证
is后的空格是在缓冲区,gets也能读取吗?还有,如果就没有c数组,printf(“%s%s\n”,a,b),结果是thisis还是this空格is空格,还是thisis空格
追答gets是接收空格的!无论这个空格在开头,在中间或是在末尾。
printf(“%s%s\n”,a,b)的输出结果是thisis,前后都没有空格。
那如果这道题中把b.c都去掉,只有a一个数组,然后输入this〈空格〉它会输出this吗?空格又存到哪了,没有另外的空间那?
追答我去,我看错了.你写代码写得好多错误.答案是对的.第一个%S收到的字符是:this(后面的空格还在内存中)第二个是is(is后的空格在内存中,但is前的空格已被吸收了)然后一个gets把is后的那个空格到\n(不包括)都存到c里了也就是说:
A:this
B:is
C: a cat!
你意思是由于后面出现的gets,把它前面的空格本来是在b里的,移到了c里?
还有,第一个空格既然在内存中,为什么输出的时候不输出