| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1193 人关注过本帖
标题:scanf 接受包括空格在内字符串出现了问题
取消只看楼主 加入收藏
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
结帖率:96.15%
收藏
已结贴  问题点数:20 回复次数:4 
scanf 接受包括空格在内字符串出现了问题
由于需要接受包括空格在内的字符串数据,所以在网上搜了下资料,看到了用scanf("%[^\n]",input);来接受的,结果发现运行程序会直接跳过这个语句不执行,也不能说不执行,而是不会等待你输入就结果继续运行下面的程序了,求解释!!!!
搜索更多相关主题的帖子: 问题 数据 运行程序 字符串 资料 
2012-04-20 00:22
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
顺便说一下,由于gets   会出现漏洞问题,所以不到万不得已不想用

清风拂暮(木)
2012-04-20 00:24
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
fgets会存在连换行符号的读进去的情况

清风拂暮(木)
2012-04-20 17:36
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
清除输入缓冲的残留字符应该是fflush(stdin) 不是stdio 吧
还有我这里是一个循环输入的,用每次循环先用fflush,在接受输入字符,但是还是一样,
另外fgets  对之前循环之外的输入,用了fflush  但他还是会接受到之前残留下来的换行符号,不知道为什么

贴上一小部分我的代码吧,比较直观
程序代码:
  printf("please input your name,note:your name lenth not over 20 byte\n");
    scanf("%s",clientName);
    if(send(sd,&clientName,strlen(clientName),0)<0)
    {
       perror("send");
       exit(1);
    }
    if(pthread_create(&pd,NULL,(void *)dellMsgFromServer,sd)!=0)
    {
       perror("pthread_create");
       exit(1);
    }
    while(1)
    {
       fflush(stdio);
       fgets(input,1024,stdin);
       if(send(sd,&input,strlen(input),0)<0)
       {
          perror("send");
          exit(1);
       }

我这是写聊天室的部分代码,那个线程用来接受并处理服务器发送来的信息

清风拂暮(木)
2012-04-20 17:55
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
我自己想到了个办法处理了,最笨的方法,通过用字符串结束符号覆盖换行符号,贴出出错部分改正后的代码如下:
程序代码:
    printf("please input your name,note:your name lenth not over 20 byte\n");
    scanf("%s",clientName);
    if(send(sd,&clientName,strlen(clientName),0)<0)
    {
       perror("send");
       exit(1);
    }
    if(pthread_create(&pd,NULL,(void *)dellMsgFromServer,sd)!=0)
    {
       perror("pthread_create");
       exit(1);
    }
    while(1)
    {
       input[0]='\0';
       fgets(input,1024,stdin);
       input[strlen(input)-1]='\0';
       if(send(sd,&input,strlen(input),0)<0)
       {
          perror("send");
          exit(1);
       }


[ 本帖最后由 清风拂晓 于 2012-4-20 20:16 编辑 ]

清风拂暮(木)
2012-04-20 20:15
快速回复:scanf 接受包括空格在内字符串出现了问题
数据加载中...
 
   



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

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