猿问

C语言大神求救!

main()

         static char a[3];
         scanf("%s",a);
          printf("%c,%c",a[1] a[2]);

如果输入ab    
他的输出结果是啥啊?

做一个好码农
浏览 1474回答 2
2回答

onemoo

首先,你这个 printf 语句的参数 a[1] a[2] 间是不是少了个逗号啊。抛开这个笔误。你输入的是一个字符串“ab”,不要忘了字符串结尾还有一个 \n。所以数组 a 中接受到的元素是 a b 和 \n。printf 打印的是 a[1] 和 a[2]。数组下标是从 0 开始的,所以打印的是 a 的第二个和第三个字符,也就是 b 和 \n。当然,那个 \n 只是一个回车,看不到字符的。  结果应该是 b,[回车]

onemoo

前一个回答中我误将 \0 写成了 \n。我想再详细说明下 scanf 在读字符串时的行为:当格式化指示符为 %s 时,scanf 就会将输入的内容视为字符串,它会一个一个地接收字符直到你输入了任何一个“空白字符”——回车、空格、tab 都算是空白字符——它就知道你字符串输入完了,并且会自动再添加一个'\0'。 这是因为 C 规定字符串是以 '\0' 结尾的,所以它才自动添加这个 \0。也就是说,就算我们输入的是 a b [空格],这个字符串 a 得到的是 a b \0,而不是 a b \n。另外,我们刚输入的这个用来表明字符串结束的空白字符(不管是回车、空格还是tab),不会被 scanf 读取走!   所以如果后面继续用 scanf 读 %c 的话,是会读到这个空白字符的,这一点需要注意!。
随时随地看视频慕课网APP
我要回答