| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1826 人关注过本帖
标题:scanf 的匹配原则不同的编译器不一样?
只看楼主 加入收藏
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
肯动脑肯动手,版主为么子骂人呢?这个世界,没有无缘无故滴恨……

梦想拥有一台龙芯3A-4000
2014-07-25 14:54
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 11 楼 ditg
谁骂人了?

代码测试环境:  WinXP+C-Free5.0.
2014-07-25 15:00
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
“问了scanf的问题居然没被版主骂,哈哈”,回应一下这句而已,呵呵

梦想拥有一台龙芯3A-4000
2014-07-25 15:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
又不是不动脑筋、提问方式不合格的问题,我干嘛骂人。其实有时语气严厉点也不是骂。

授人以渔,不授人以鱼。
2014-07-25 15:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我曾经说过,scanf()类函数最好不要接收超过一个的数据项,要接收多项数据,就分多个scanf()读,每次都检查读取是否成功,然后再决定是否读取下一项。一次读多项,没必要地增加自己排错的困难。

授人以渔,不授人以鱼。
2014-07-25 15:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf_s()中缓冲区大小参数在参数表的第3个位置,而你写的第三个是一个地址,当然出错了。我没试过这样读多项的,你试试写"%1c,%1c"看。

授人以渔,不授人以鱼。
2014-07-25 15:51
飞跃贫民窟
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-7-25
收藏
得分:0 
回复 15 楼 TonyDeng
嗯,嗯,其实版主也不是骂人,就是可能回答相同类型的问题多了,所以有点反感不思考就提问的帖子,当版主也不容易嘛,谢谢版主
2014-07-25 15:52
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 15 楼 TonyDeng
T版,  在8楼的帖子中的现象是怎么回事? 是我测试有问题还是其它?

对于scanf函数来说, 中文标点是否有影响? 对于中文标点如何处理?

代码测试环境:  WinXP+C-Free5.0.
2014-07-25 15:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用vvvcuu在2014-7-25 15:52:42的发言:

T版,  在8楼的帖子中的现象是怎么回事? 是我测试有问题还是其它?

对于scanf函数来说, 中文标点是否有影响? 对于中文标点如何处理?


见15、16楼。理论上说,中文标点也没问题,只要输入严格也用中文标点即可。不过,我还是不提倡那种写法——第一,不要有多项输入;第二,不要有多余的格式符。像scanf()这种可变参数的C函数,其实在C++的书中已经批判得太多了,都不鼓励用,就算要用,用一项就好,即当传统非可变参数函数用。像scanf_s()这样添加参数项的,在中间出现可变参数列表,出错就不奇怪了。

授人以渔,不授人以鱼。
2014-07-25 15:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是微软的示例,仿照它那样用:

程序代码:
// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
  
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int      i,
            result;
   float    fp;
   char     c,
            s[80];
   wchar_t  wc,
            ws[80];

   result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
                     &wc, 1, s, _countof(s), ws, _countof(ws) );
   printf( "The number of fields input is %d\n", result );
   printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,
           wc, s, ws);
   result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
                      &wc, 1, s, _countof(s), ws, _countof(ws) );
   wprintf( L"The number of fields input is %d\n", result );
   wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,
            c, wc, s, ws);
}


http://msdn.("stdio%2Fscanf_s");k(scanf_s);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true

[ 本帖最后由 TonyDeng 于 2014-7-25 16:08 编辑 ]

授人以渔,不授人以鱼。
2014-07-25 16:03
快速回复:scanf 的匹配原则不同的编译器不一样?
数据加载中...
 
   



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

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