标题:转换说明符%n (printf(),scanf()...)
取消只看楼主
lucyqixi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-7-4
 问题点数:0 回复次数:1 
转换说明符%n (printf(),scanf()...)
[size=4]转换说明符%n的参数是一个int对象的地址,它向这个参数写入其所在字符串之前的字符数量.在printf(),scanf(),fprntf(),fscanf(),sprintf()中的作用相同,且不影响它们的返回值.[/size]#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   FILE *fp;
   char strinre[]="12345";
   char strinwr[50];
   int numa,numb,numc,numd;
   
   scanf("%s%n",strinwr,&numa);
   printf("ab%ncdef%n\n%s%n\n",&numb,&numc,strinwr,&numd);
   printf("numa==%d   numb==%d   numc==%d   numd==%d\n",numa,numb,numc,numd);
   if((fp=fopen("work","w+"))==NULL)
     exit(1);
   fprintf(fp,"%s%nabc",strinre,&numa);
   printf("%d\n",numa);
    rewind(fp);
   fscanf(fp,"%s%n",strinwr,&numb);
   printf("%s   %d\n",strinwr,numb);
   return 0;
}
Welcome!
abcdef
Welcome!
numa==8   numb==2   numc==6   numd==15
5
12345abc   8

gcc 4.2.1,Digital Mars C 8.50,turbo c 2上编译成功.

VC++2005上没通过.

C89/C99上定义的标准转换说明符.

[[it] 本帖最后由 lucyqixi 于 2008-6-2 09:08 编辑 [/it]]
搜索更多相关主题的帖子: printf scanf 
2008-05-30 17:10
lucyqixi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-7-4
得分:0 
不止GCC,上面列出来的那些都支持.因为在C89标准的时候就有了.我也是偶然在翻C99标准的时候发现的.空白字符也是字符,只是在SCANF中,使用%S会跳过前面的空白字符,如果有的话,%N仍然计数.至于具体有什么实际作用,我也没发现,不过还有什么更有效率的方法能实现这样任意位置的计数,我也没发现.
2008-06-02 09:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-216720-1-1.html




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

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