sprintf(fmt, "%%%ds", max-1);是什么意思啊?具体程序见帖子。请教!

wayne92 2005-05-21 11:34:54
#include<stdio.h>
enum{max=20};
main()
{

char name[max];
char fmt[10];
printf( "Please enter your first name: \n");

sprintf(fmt, "%%%ds", max-1);/*当输入大于10时,为什么不会有溢出?三个%时什么意思?*/

scanf(fmt, name);/* 读入至多 max-1 个字元到 name 之中。*/

printf( "Hello %s\n", name);
return 0;
}
...全文
2497 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nasi00 2005-05-22
  • 打赏
  • 举报
回复
就是利用sprintf()做出一个fmt字符串出来,然后再在后面的scanf()中利用这个fmt来控制格式,方法很常用的
zhousqy 2005-05-22
  • 打赏
  • 举报
回复
%%就是输出一个%的意思
sms88 2005-05-22
  • 打赏
  • 举报
回复
qingyuan18 2005-05-22
  • 打赏
  • 举报
回复
好久没用过sprintf了,生疏了.....
lzwei3842 2005-05-22
  • 打赏
  • 举报
回复
顶了
mostideal 2005-05-22
  • 打赏
  • 举报
回复
呵呵,,楼上的都对。。。
jixingzhong 2005-05-22
  • 打赏
  • 举报
回复
当输入大于10时,为什么不会有溢出?三个%时什么意思?*/
三个%: 前面两个输出一个%,后一个是格式化输出.

当输入大于10时:你的MAX是20啊,怎么会益出??
llf_hust 2005-05-21
  • 打赏
  • 举报
回复
#include<stdio.h>
enum{max=20};
main()
{

char name[max];
char fmt[10];
printf( "Please enter your first name: \n");

sprintf(fmt, "%%%ds", max-1);/*当输入大于10时,为什么不会有溢出?三个%时什么意思?*/
// 这叫转义序列: %% 转义后为 一个 % ,这里转义后fmt为%19s;
scanf(fmt, name);/* 读入至多 max-1 个字元到 name 之中。*/

printf( "Hello %s\n", name);
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧