| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1193 人关注过本帖
标题:scanf 接受包括空格在内字符串出现了问题
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

// 代替 fflush
// #define LINEEND while(getchar() != '\n')
#define LINEEND do{int ch; while((ch=getchar() != '\n') && ch != EOF)}while(0)

// 自定义函数解决
// myGetLine(clientName, sizeof clientName);
int myGetLine(char *str, int size)
{
    int ch, i;
    
    if (!str || size < 1)
        return 0;

    for (--size, i=0; (ch=getchar() != '\n') && ch != EOF && i < size; ++i)
        str[i] = ch;
    str[i] = '\0';
    
    while(ch != '\n' && ch != EOF)
        ch = getchar();
    return i;
}


int main(void)
{
    char clientName[21];
    char input[1024];
    printf("please input your name,note:your name lenth not over 20 byte\n");
    scanf("%s",clientName);
    fflush(stdin); // LINEEND;
    while(1)
    {
       fgets(input, sizeof(input), stdin);
       fflush(stdin); // LINEEND;
       break;
    }
    
    puts(clientName);
    puts(input);
    return 0;
}


[ 本帖最后由 cosdos 于 2012-4-20 18:30 编辑 ]

—>〉Sun〈<—
2012-04-20 18:27
清风拂晓
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
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
这个方法很好

—>〉Sun〈<—
2012-04-20 22:18
快速回复:scanf 接受包括空格在内字符串出现了问题
数据加载中...
 
   



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

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