免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

scanf 详解 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-01-12 18:23 |只看该作者
早看到这个,我就不man了,害我看了半天,总算写出下面这个东东:
  1. main()
  2. {
  3. char *str1= "123:1245  567|45454";
  4. char s1[10], s2[10], s3[10], s4[10];

  5. printf("%s\n", str1);
  6. sscanf( str1, "%[^:]:%[^ ]  %[^|]|%s", s1, s2, s3, s4);
  7. printf("S1: %s\nS2: %s\nS3: %s\nS4: %s\n", s1, s2, s3, s4 );

  8. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-01-12 19:57 |只看该作者
谢谢flower

论坛徽章:
0
13 [报告]
发表于 2006-01-12 21:02 |只看该作者
原帖由 shaoxia 于 2006-1-12 19:57 发表
谢谢flower

最近那个花儿是不是楼主的MJ呢

论坛徽章:
0
14 [报告]
发表于 2006-01-12 21:23 |只看该作者
flw写的很好,不过我没有找到下面的一个问题的答案:
main()
{
        char s[1000];
        memset(s,0,sizeof(s));
        scanf("%s\n",s);
        printf("s=[%s]\n",s);

}

输入字符完毕之后,我希望按一下回车就能执行printf语句,但是我却要在按第二次回车后才看到printf打印出来的语句.请问这是为什么??

论坛徽章:
0
15 [报告]
发表于 2006-01-12 21:40 |只看该作者

回复 7楼 hsgrass 的帖子

请教,在scanf中,如何录入包含空格的字符串?


fgets输入的字符串会比实际输入的多一个字节
这样就可以了:scanf("%[^\n]%*c",str);
前不久刚学的,呵呵。

[ 本帖最后由 slowly13008 于 2006-1-12 21:43 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2006-01-14 23:46 |只看该作者
老大辛苦了,学了一些技巧啊

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char strS[100]="sadfsdfABCDEF24234kkkkkk2342,asdfsd234234asdfsdf,23423";
  6.         char strA[10][100];
  7.         int         i,num;

  8.         for(i=0;i<10;i++)
  9.                 memset(strA[i],0,100);

  10.         sscanf(strS,"%[^A-Z]%*[A-Z]%[^k]%*[k]%[^,]%*[,]%[^0-9]%*[0-9]%[^,]%*[,]%[^,]",
  11.                 strA[0],strA[1],strA[2],strA[3],strA[4],strA[5]);

  12.         for(i=0;i<6;i++)
  13.         {
  14.                 printf("字段[%d],内容[%s]%n",i,strA[i],&num);
  15.                 printf(",字段长度为[%d]\n",num-14);
  16.         }

  17.         return 0;
  18. }
复制代码

字段[0],内容[sadfsdf],字段长度为[7]
字段[1],内容[24234],字段长度为[5]
字段[2],内容[2342],字段长度为[4]
字段[3],内容[asdfsd],字段长度为[6]
字段[4],内容[asdfsdf],字段长度为[7]
字段[5],内容[23423],字段长度为[5]

论坛徽章:
0
17 [报告]
发表于 2006-01-15 00:37 |只看该作者
原帖由 shaoxia 于 2006-1-12 21:23 发表
flw写的很好,不过我没有找到下面的一个问题的答案:
main()
{
        char s[1000];
        memset(s,0,sizeof(s));
        scanf("%s\n",s);
        printf("s=[%s]\n",s);

}

输入字符完毕之后,我希望 ...


改成这样就好了:
        scanf("%s",s);

原来的 scanf("%s\n",s);最后的\n将使输入的时候忽略一个连续的\n,比如你输入test回车.....回车[任意其他字符]之后,再回车提交,前面你输入的test才会赋给s.也就是说你输入你想输入的字符串后,马上按的一个或者多个连续的回车将会被你多加的那个\n忽略掉,不认为你是再提交数据


自我感觉表达的不是很好,不知道这样是否能说明白

[ 本帖最后由 foolishfox 于 2006-1-15 00:49 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
18 [报告]
发表于 2006-01-15 13:49 |只看该作者
重出江湖了 ??

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
19 [报告]
发表于 2006-01-16 08:48 |只看该作者
非常感谢lz

论坛徽章:
0
20 [报告]
发表于 2009-01-24 21:49 |只看该作者
好贴,庆祝挖坟成功,哇咔咔
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP