printf中的%[]格式一问

waterluo2003 2003-10-16 09:46:25
你好,今天看到了一个从没见过的格式输出问题,
源程序如下:
#include<stdio.h>
main(){
int i;
char str1[80],str2[80];
printf("清输入123abcdtye测试扫描集[abcde]");
scanf("%d%[abcde]%s",&i,str1,str2);
printf("%d\t%s\t%s\n",i,str1,str2);
}
书上说输出结果为:
123 abcde tye

----------------而我输出为:123 abcd tye,
我把[abcde]改为[abde]则只输出:123 ab cdtye
////////////////请问%[]格式怎么算呢?用于什么地方比较好呢??
先谢了!!!
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireinsky 2003-10-17
  • 打赏
  • 举报
回复
谢谢 bashfulboy(Jack He)和waterluo2003(水) ,你们让我学到有有价值的东西。再次谢过!
waterluo2003 2003-10-17
  • 打赏
  • 举报
回复
谢谢你们的回答
minghui000 2003-10-17
  • 打赏
  • 举报
回复
ok
bashfulboy 2003-10-16
  • 打赏
  • 举报
回复
%[]格式是这样的一种格式,允许格式化的内容必须满足[]中的要求
如%[abcde] 要求
以如下格式为例:%d%[abcde]%s 对应:一个任一的数字 + 以字符a/b/c/d/e任意组合的字符串 + 任意字符串(但是该字符串的第一个字符不能为a/b/c/d/e中的任一一个。

因此: 123abcdtye = 123 + abcd + type
如果格式改为 %d%[abde]%s,则
123abcdtye = 123 + ab + cdtye (因为c不在abde范围以内)

gy_hong 2003-10-16
  • 打赏
  • 举报
回复
这种格式我以前也没见过,不过我刚才测试了测试,结论如下:
在scanf中使用“%[]”表示从键盘读入一条字符串,但碰到第一个不在“[]”中所列的字符表示结束。举例说明:scanf("%[ab]",str);当我们输入abcd时,由于‘a’和‘b’在[ab]中,而‘c’不在“[ab]”中,所以此时str的值是“ab”。
针对你的具体问题,i等于123,字符‘t’不在[abcde]中,所以str1等于abcde,str2等于tye。而将[abcde]修改为[abde],当读到字符'c'时已经不在【abde]中了,所以str1等于ab,str2等于cdtye。所以书上的结构可能有误。
不知我的解释是否明白,希望批评指正,谢谢!

69,336

社区成员

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

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