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

© duocaikatong 中级黑马   /  2014-12-24 21:16  /  6938 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
#include <stdio.h>
int main()
{
    char str[100];
    printf("请输入一段英文句子:\n");
    scanf("%s",str);
    printf("%s\n",str);
   
}为什么输入句子hello java world 运行结果只能打出hello呢,好像有空格就不能输出了。

17 个回复

正序浏览
百度百科中-scanf函数
http://baike.baidu.com/link?url=ufLRYOQQ-aDodMSqy-9Nst-oMH9Zjb-2-xR5Kbm881fdWobDUm-VJaQZbbOeD29w_KedEEtH62nX9SKGWP58tq#4
找 [注意问题]那一栏看
里面介绍了

(5) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

也给了例子和解释

回复 使用道具 举报
兄弟 你走弯路了吧  你直接咨询黑马程序员网址的老师啊  老师会根据你报哪个课 给你推荐视频的 考试就考给你推荐的视频里面的 你学C语言是为了程序入门么?
回复 使用道具 举报
兄弟 你走弯路了吧  你直接咨询黑马程序员网址的老师啊  老师会根据你报哪个课 给你推荐视频的 考试就考给你推荐的视频里面的 你学C语言是为了程序入门么?
回复 使用道具 举报
scanf 读到空格就结束输入环节  读字符串要用gets 等语句读到回车结束
回复 使用道具 举报
楼主这节奏是C语言入门后 在学java、IOS???
回复 使用道具 举报

scanf函数操作的是地址,不是赋值,所以与“不是初始化时,数组不能被整体赋值”无关,而且事实证明:只要不空格 字符串就可以完整的输出,如果是赋值运算,难道没初始化的同时,你可以把字符串赋值给字符数组?
回复 使用道具 举报
不能使用scanf标准格式输入,只能使用gets(&str),虽然这样有warning!
回复 使用道具 举报
这个问题说明你的scanf函数没掌握,你使用scanf接收一个字符串,而 scanf从键盘读取你的输入字符串,肯定是需要一个终止符的,空格回车tab都是终止符,所以你后面的数据是无法被读取的。
回复 使用道具 举报
上一个说错了,不是printf的问题,是scanf("%s",str);的问题
回复 使用道具 举报
你把scanf("%s",str);这句换为gets(str);
回复 使用道具 举报
你输出的时候printf("%s\n",str);那个str是数组名,代表地址,输出时就会依次输出,直到遇到\0为止,而在字符串中,空格就被看成\0了吧,我也不太清楚,感觉是这样
回复 使用道具 举报
所以只与空格有关
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

scanf函数操作的是地址,不是赋值,所以与“不是初始化时,数组不能被整体赋值”无关,而且事实证明:只要不空格 字符串就可以完整的输出,如果是赋值运算,难道没初始化的同时,你可以把字符串赋值给字符数组?
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

应该是与空格有关,scanf函数直接操作的是地址不是赋值,所以与这个什么“不是初始化时,数组不能被整体赋值”无关。
回复 使用道具 举报
我是过来学习的,对于c的输入和输出不太懂
回复 使用道具 举报
小徐_y8nUx 来自手机 中级黑马 2014-12-25 09:36:42
沙发
学习了!!
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:57
还有strcpy函数你可以看看的

这个李明杰的基础视频都没有讲strcpy和gets() puts()方法,考黑马会考这些啊
回复 使用道具 举报
还有strcpy函数你可以看看的
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)那这种问题怎么破呢?如果输入单词后面有空格就没了?
回复 使用道具 举报
zhaojiajun 发表于 2014-12-25 00:27
不是初始化时,数组不能被整体赋值。编译系统把空格做为字符串的分隔符,会把hello作为一个字符,然后在hel ...

输入一英文句子,将其中所有单词首字符转换成大写后输出。那这个题目里面不能输入空格吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马