| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3304 人关注过本帖
标题:scanf函数能否用数字作输入分隔符?
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:1 
游戏之作
程序代码:
#include<stdio.h>

int main()
{
    int a, b, c;
    scanf("%1d23%1d32%1d", &a, &b, &c);
    printf("a = %d, b = %d, c = %d\n", a, b, c);
    return 0;
}


[fly]存在即是合理[/fly]
2013-03-27 12:46
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:1 
scanf("%d 23%d 32%d", &a, &b, &c);这样就可以输入:1 232 323得到你想要的,我想应该是如果你中间没有空格之类的表示读入一次结束,编译器会不知道读到哪里结束,而加上空格在输入的时候用空格隔开,编译器就能够判断出谁和谁对应了。输入的时候格式一定要正确,23和32必需能够和输入对应起来才可以正确读入,否则就会出错。
2013-03-27 13:04
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 楼主 xcwu
我试了一下,scanf("%d23%d32%d",&a,&b,&c)确实是编译器无法知道什么时候结束,如果把分隔符换成%d无法读入的内容就可以了scanf("%dA%dA%d", &a, &b, &c);输入1A2A3就可以得到a=1,b=2,c=3。也就是说如果想用这种奇怪的分隔符就要用和占位符不一样类型的分隔符,这样让编译器知道读到什么地方结束。
2013-03-27 13:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那个不是编译器读数据,而是scanf()函数运行时在读数据,这不是编译期间做的事。

授人以渔,不授人以鱼。
2013-03-27 13:12
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 14楼 TonyDeng
那就是scanf()无法知道什么时候结束……
2013-03-27 13:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,不能用与需要读取的数据类型有可能混淆的字符做分隔符,正如scanf()读字符串无法读入带空格等空白字符的字符串一样,因为它无法判断空格是不是属于字符串的一部分。同样,这里"23"是有可能被识别为数字的,也会干扰它的判断,用scanf()读十六进制数,也不能使用那6个字母作分隔符。一般来说,不建议在scanf()中使用多余的分隔符,甚至在我看来,在交互模式下scanf()中都不应该写一个以上的数据项。

其实scanf()不过是长期使用中的函数,如果有特殊的需要,完全可以自己写一个针对性强的,不必非要用它,它又不是C语言本身的功能。C语言的强大,只不过是因为它接近空白,全部要你自己写,等于完全定制,不受约束。事物本身越简单,越能组合出强大的整体,但相对更繁琐、要求工作更细致。C语言的难,也是因为它的简单,困难都不在语言本身,九成以上是别的因素造成的,比如硬件和系统细节。

[ 本帖最后由 TonyDeng 于 2013-3-27 13:32 编辑 ]

授人以渔,不授人以鱼。
2013-03-27 13:26
快速回复:scanf函数能否用数字作输入分隔符?
数据加载中...
 
   



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

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