| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 18296 人关注过本帖
标题:scanf输入字符串遇到空格就退出?
只看楼主 加入收藏
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
结帖率:88.24%
收藏
 问题点数:0 回复次数:5 
scanf输入字符串遇到空格就退出?
#include <stdio.h>

int main(void)
{
    char name[40];

    printf("what's your name?");
    scanf("%s", name);
    printf("%s,hello boy", name);
    getchar();
    getchar();
    return 0;
}

输入一个单词没问题
输入两个单词无论加入多少个getchar()都会弹出?

请告诉我是什么“道理”
搜索更多相关主题的帖子: scanf 字符 输入 空格 
2010-01-25 16:47
h978147355
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:63
专家分:187
注 册:2009-12-29
收藏
得分:0 
scanf读取时 是遇到空格就停止读取
也就是说 如果你键入得是harry potter 那么实际上scanf只能获取harry这个单词 后面的“  potter”会在停在输入流中
那么你就要最少要加9个getchar(一个空格 6个单词字母 一个换行符还有一个待输入光标)才能看到运行结果
2010-01-25 17:08
a573511106
Rank: 2
等 级:论坛游民
帖 子:20
专家分:18
注 册:2010-1-24
收藏
得分:0 
用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。
为了避免这种情况,可多设几个字符数组分段存放含空格的串。
2010-01-26 13:08
human84
Rank: 3Rank: 3
来 自:哈尔滨 / 重庆
等 级:论坛游侠
帖 子:154
专家分:141
注 册:2009-11-1
收藏
得分:0 
scanf就那样,用gets()就好了。
2010-01-27 12:10
doubleflygo
Rank: 2
等 级:论坛游民
帖 子:26
专家分:50
注 册:2010-1-22
收藏
得分:0 
想知道谁在起作用很简单,因为你输入几个单词的时候,发现只有第一个单词能够显示出来,猜想scanf(%s)提取字符窜的条件是Enter(换行--输入结束)或者Space(空格),而且还可以做个极端的测试,就你一开始只输入换行或者空格,发现程序永远不会执行printf,而只要我们输入一窜连续字符+一个空格之后,不论我们输入什么,Enter之后,printf执行完之后都是一开始的一窜连续字符,因此我们还可以知道,scanf(%s)提取完成的语句格式是一开始遇到的一连窜字符;而由于执行getchar(),之前printf输出的是scanf所提取的字符窜,而之后的字符或者空格包括回车将会被getchar()调用,其实你的程序两个getchar()的作用只相当于一个getchar()的作用,因为第一个只不过读取的是回车符,也就是你输入一个字符窜之后的回车键而已;因此当你输入几个用空格隔开的字符窜的时候,无用的getchar()的个数应该等于(回车数)1+n1(空格数)+n2(除第一个连续有形字符窜的其他字符数);所以当你输入两个甚至几个名字的时候,getchar()是远远不够用的;
2010-01-29 08:35
少林小和尚
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2013-3-31
收藏
得分:0 
scanf的结束标志是空格喝回车键,而gets的结束标志为回车键,输入字符串时,一般采用gets。楼上的大神讲的很好。。
2013-05-16 21:24
快速回复:scanf输入字符串遇到空格就退出?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016151 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved