A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 千年的泪 于 2014-5-29 10:45 编辑

为什么输入一段文字后,并没有超过30个字符,但是只显示了前面的几个字符?
输入:asdf asdlk fel afself ef
输出:asdf
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         char s[30];
  5.         scanf("%s", s);
  6.         printf("%s\n", s);
  7.         return 0;
  8. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

6 个回复

正序浏览
原来如此!{:3_54:}
回复 使用道具 举报
你应该使用gets来读一行  
回复 使用道具 举报
学习了{:3_46:}
回复 使用道具 举报
XCodeRush 发表于 2014-5-29 00:19
回答:当程序执行到scanf()函数时,
scanf()函数会在遇到第一个空白字符(空格、制表符、换行符)处停止读 ...

这个不错 顶
回复 使用道具 举报
回答:当程序执行到scanf()函数时,
scanf()函数会在遇到第一个空白字符(空格、制表符、换行符)处停止读取。
用scanf()只会把一个单词而不是把整个输入的字符串读入字符数组中。
如果想要读入一整行的输入,可以考虑使用C提供的其他输入函数.
比如:gets()函数或者fgets()函数
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     char s[30];
  5.    
  6.     // gets()函数会读取一整行
  7.     // 但是要注意,gets()函数不检查输入的字符数是否超过字符数组的实际容量。
  8.     // 在使用gets()函数时要注意准备输入的字符数,以及要为'\0'预留存储空间。
  9.     // fgets()函数可以设定最大读取字符数,但如果只是测试程序,还是gets()函数比较方便。
  10.     // fgets(s, sizeof(s), stdin);
  11.     gets(s);
  12.    
  13.     printf("%s\n", s);
  14.    
  15.     return 0;
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
空格在内存中是以“/0”存在的,一个字符串的最后也是默认加上一个“/0”,当打印到空格他就结束了,因此不会打印完
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马