| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3222 人关注过本帖
标题:结构体字符串赋值问题 求解脱
只看楼主 加入收藏
ahfytao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-6-9
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:13 
结构体字符串赋值问题 求解脱
程序代码:
/*很简单的一个题目,就是读入字符串,如“[expecto patronum] send a Patronus to the dementors”,
但是要把中括号内的单独保存,后面的单独保存。下面的程序自我感觉没问题,但VC下打印出来的是乱码,求大神指导。
测试用例:
[expecto patronum] send a Patronus to the dementors
[expelliarmus] the disarming charm*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
     char m[25];
     char em[85];    
}node; //定义结构体用来保存
int main()
{
    int i,c,l;
    char p[25],t[85],q[25];
    node a[10];
    i=0;
    c=0;    
    while(scanf("%s",p)!=EOF)
    {
       if(strcmp(p,"@END@")==0)
            break ;
       else
        {
            l=strlen(p);
            if(p[l-1]!=']')
            {
                scanf("%s",t);
                strcat(p," ");
                strcat(p,t);
            }
            getchar();
            gets(t);
        //    memset(a[i].m,'\0',sizeof(char)*25);
            strcpy(a[i].m,p);
            strcpy(a[i].em,t);
            i++;   
            c++;
            printf("em=%s m=%s\n",(a[i].em),(a[i].m));
        } 
    }
    return 0;
}

求大神帮助,这是一个的大问题的输入部分,所以必须要用结构体。
搜索更多相关主题的帖子: 测试 结构体 字符串 
2013-03-28 09:33
ahfytao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-6-9
收藏
得分:0 
求高手啊
2013-03-28 09:56
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:7 
你这个要用gets函数全部读取,再处理字符串,用scanf遇到空格就停一下、、、


[fly]存在即是合理[/fly]
2013-03-28 10:30
ahfytao
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-6-9
收藏
得分:0 
正在用gets试。。。。
但这个问题到错在那,还是不知道
2013-03-28 10:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:7 
1。字符串有长度限定吗?[]中字符串长度有限定吗?其后字符串长度有限定吗?

2。“后面的单独保存”中“后面的”是指“ send a Patronus to the dementors”还是“send a Patronus to the dementors”?

3。是如果一整行为 @END@ 时结束吗?

4。是否存在例外,如
[expecto patronum send a Patronus to the dementors
test [expecto patronum] send a Patronus to the dementors
等可能?
2013-03-28 10:53
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:7 
要是只是想把一行字符串拆成两个的话 用gets好了 scanf一个单词一个单词的读很麻烦的
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct
{
    char m[25];
    char em[85];    
}node;

int main()
{
    int i=0;
    char p[120], *q;
    node a[10];

    while((q=gets(p)) != NULL){
        while(*q++ != ']');
        *q = '\0';
        strcpy(a[i].m, p);
        strcpy(a[i].em, q+1);
        printf("line=%d, em=%s, m=%s\n", i++, a[i].em, a[i].m); 
    }

    return 0;
}

上面代码不处理任何异常格式 必须是[xxx]的开头 接空格 接字符串

人生是一场错过 愿你别蹉跎
2013-03-28 11:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
试了试,用scanf也可以,不提倡
程序代码:
#include<stdio.h>

int main()
{
    char a[50], b[100];
    scanf("%*c %[^]] %*c %[^\n]", a, b);
    puts(a), puts(b);
    return 0;
}


[ 本帖最后由 azzbcc 于 2013-3-28 11:38 编辑 ]


[fly]存在即是合理[/fly]
2013-03-28 11:36
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
楼上 格式控制符 玩的很溜啊

人生是一场错过 愿你别蹉跎
2013-03-28 11:41
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
百度滴


[fly]存在即是合理[/fly]
2013-03-28 11:41
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
楼主 你的代码错在两个地方
1. 你想在读到以 ] 结束的字符前 把读到的字符都存到p里面 那么你应该用while循环 不应该用if
   把if换成while之后 注意在循环体内更新变量 l
2. i++ c++的语句应该在printf之后使用 否则你输出的就是i++之后的 那个还没有赋值 当然会输出乱码

要是用scanf的话 你就用7楼的方法吧 程序可以很简洁 但格式必须完全匹配 用gets的话 你可以加入一些错误处理
不好理解的话 百度一下%的高级用法
http://anthonyciomp.blog.

人生是一场错过 愿你别蹉跎
2013-03-28 11:49
快速回复:结构体字符串赋值问题 求解脱
数据加载中...
 
   



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

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