为了账号安全,请及时绑定邮箱和手机立即绑定

C语言大神求救!

C语言大神求救!

C
做一个好码农 2017-06-16 15:35:46
main() 〔          static char a[3];          scanf("%s",a);           printf("%c,%c",a[1] a[2]); 〕 如果输入ab     他的输出结果是啥啊?
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

首先,你这个 printf 语句的参数 a[1] a[2] 间是不是少了个逗号啊。抛开这个笔误。


你输入的是一个字符串“ab”,不要忘了字符串结尾还有一个 \n。所以数组 a 中接受到的元素是 a b 和 \n。

printf 打印的是 a[1] 和 a[2]。数组下标是从 0 开始的,所以打印的是 a 的第二个和第三个字符,也就是 b 和 \n。


当然,那个 \n 只是一个回车,看不到字符的。  结果应该是 b,[回车]

查看完整回答
1 反对 回复 2017-06-16
  • 做一个好码农
    做一个好码农
    明白了,谢谢
  • onemoo
    onemoo
    我无意中又点进这里,发现我回答中竟然写错了! 回答的第2行中“不要忘了字符串结尾还有个\n”,这里应该是\0,而不是\n! 抱歉了! 我另外又给你写了一个回复来详细说明。
?
onemoo

TA贡献883条经验 获得超454个赞

前一个回答中我误将 \0 写成了 \n。

我想再详细说明下 scanf 在读字符串时的行为:当格式化指示符为 %s 时,scanf 就会将输入的内容视为字符串,它会一个一个地接收字符直到你输入了任何一个“空白字符”——回车、空格、tab 都算是空白字符——它就知道你字符串输入完了,并且会自动再添加一个'\0'。 这是因为 C 规定字符串是以 '\0' 结尾的,所以它才自动添加这个 \0。

也就是说,就算我们输入的是 a b [空格],这个字符串 a 得到的是 a b \0,而不是 a b \n。

另外,我们刚输入的这个用来表明字符串结束的空白字符(不管是回车、空格还是tab),不会被 scanf 读取走!   所以如果后面继续用 scanf 读 %c 的话,是会读到这个空白字符的,这一点需要注意!。

查看完整回答
反对 回复 2017-09-12
  • 2 回答
  • 0 关注
  • 1473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信