黑马程序员技术交流社区

标题: 关于程序输出的问题?请教高手快速解决 [打印本页]

作者: 千年的泪    时间: 2014-5-28 23:26
标题: 关于程序输出的问题?请教高手快速解决
本帖最后由 千年的泪 于 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. }
复制代码


作者: xiaodixing    时间: 2014-5-29 00:06
空格在内存中是以“/0”存在的,一个字符串的最后也是默认加上一个“/0”,当打印到空格他就结束了,因此不会打印完
作者: XCodeRush    时间: 2014-5-29 00:19
回答:当程序执行到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. }
复制代码


作者: Guardian_Angel    时间: 2014-5-29 01:52
XCodeRush 发表于 2014-5-29 00:19
回答:当程序执行到scanf()函数时,
scanf()函数会在遇到第一个空白字符(空格、制表符、换行符)处停止读 ...

这个不错 顶

作者: 詹绪长    时间: 2014-5-29 06:28
学习了{:3_46:}
作者: 夏沫的黄昏′    时间: 2014-5-29 08:47
你应该使用gets来读一行  
作者: 千年的泪    时间: 2014-5-29 10:49
原来如此!{:3_54:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2