关于c语言printf函数%n的。

#include<stdio.h>intmain(){intn;char*m2="Decimal";char*m3="Octal";char*m4="Hexadecima... #include<stdio.h>
int main()
{
int n;
char*m2="Decimal";
char*m3="Octal";
char*m4="Hexadecimal";
printf("%s%s%s%n",m2,m3,m4,&n);
printf("\n\n%d\n",n);

return 0;
}

n显示的值是1995742772但把int n;放到printf上面n显示的值就是3?为什么?
还有%n是字符串数目还是字符数目?
声明变量n的位置变化怎么也会改变n的值?上面这个值是1995742772
#include<stdio.h>
int main()
{

char*m2="Decimal";
char*m3="Octal";
char*m4="Hexadecimal";
int n;
printf("%s%s%s%n",m2,m3,m4,&n);
printf("\n\n%d\n",n);

return 0;
}
n值就为3?为啥不是23?
展开
 我来答
百度网友f297be6afd
推荐于2016-07-15 · 超过19用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:53.7万
展开全部

这才是你上面代码的结果,n=23,,23是由printf函数返回值得到的,第一个printf 在此输出了23字符的结果,所以返回值是23,而你这里用%n(字符数目)和&n,就把23赋值给了n。

用一下代码来验证:

#include<stdio.h>

int main()

{

    int n,num;

    char*m2="Decimal";

    char*m3="Octal";

    char*m4="Hexadecimal";

    num = printf("%s%s%s%n",m2,m3,m4,&n);

    printf("\n\n%d\n",n); 

 printf("\n\n%d\n",num);

 

    return 0;

}

输出结果:

 

这与int n 在哪里定义无关,只要放在printf前面就好。

追问

。。。按你上面弄的。。什么情况

追答
这是什么情况?用的我上面的代码吗?怎么会出现“F:\>” 这种情况哦?我用的VC6.0编译器,答案确实是我给出的那种,你再看看嘞。
丁飞159
2012-11-12 · 超过10用户采纳过TA的回答
知道答主
回答量:110
采纳率:21%
帮助的人:22万
展开全部
%n与其他格式说明符号不同。%n不向printf传递格式化信息,而是令printf把自己到该点已打出的字符总数放到相应变元指向的整形变量中。
追问
那为啥是3?
追答
你上面再多加三个字符就变成26了,这个输出的是你输出字符的个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-12
展开全部
他可能将n当指针了
%n为字符数目
追问
怎么改?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
unix123en
2012-11-12 · 超过41用户采纳过TA的回答
知道答主
回答量:189
采纳率:0%
帮助的人:95.4万
展开全部
打印结果应该是:
DecimalOctalHexadecimal
23

%n将当前printf已打印的字符数写入一个int指针
追问
但就是3啊不是23.。
追答
我这里执行的结果就是23,没有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科
2021-01-18 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.2亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式