| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题:看了帖子《如何读取一个文件把文件每行内容赋值给一个结构数组元素》,试验 ...
只看楼主 加入收藏
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
看了帖子《如何读取一个文件把文件每行内容赋值给一个结构数组元素》,试验中发现一些问题,请教一下
#include<stdio.h>
//#include<unistd.h>
struct emp{
        char name[20];
        long age;
        char phone[12];
};

int main(){
        int i;
        char str[50];
        FILE * fp = fopen("emp.txt", "r");
        struct emp a[3];
        i=0;
        while(fgets(str,50,fp)!=NULL){
                //for(i=0;i<3;i++){
                sscanf(str, "%[^|]|%ld|%s", a[i].name, &a[i].age, a[i].phone);
                //}
                i++;
        }
        return 0;
}






如果文件中的数据形式为  fred|30|18677442345|990|009
那么sscanf(str, "%[^|]|%ld|%s", a[i].name, &a[i].age, a[i].phone);这个语句里的 "%[^|]|%ld|%s" 该如何改写呢?
搜索更多相关主题的帖子: include return 如何 元素 
2015-12-12 22:19
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
收藏
得分:0 
另外,请问  %[^|]|%ld|%s   这些符号该如何理解
2015-12-12 22:22
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:2 
"%[^|]|%d|%[^|]|%d|%s"

我们都在路上。。。。。
2015-12-12 22:55
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
有点类似于正则表达式中的集合。。多看些例子就明白了。

我们都在路上。。。。。
2015-12-12 22:57
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
收藏
得分:0 
用了"%[^|]|%d|%[^|]|%d|%s" ,但是不行。txt里的信息为10001|英语|2|20|2
我自己编写的读取这些信息到界面上的语句如下,请问哪里出错了,该如何修改
struct couse//课程信息结构体函数
{            char name1[30];
             int num1;            
         int credit;                                           // 学分                                                                           
             int maxP;                                          //上限人数
             int surplusP;                                     //剩余人数
             struct couse *next;                                
};                                                         


void Com()  //课程信息
{   int i=0;
    char str[50];
    struct couse p[600];
    FILE *ft=fopen("D:\\couse.txt","r");
    printf("课程编号\t课程名称\t学分\t课程上限人数\t\t剩余学位\n");
    while(fgets(str,50,ft)!=NULL)
    {
        sscanf(str,"%[^|]|%s|%[^|]|%d|%d",&p[i].num1,p[i].name1,&p[i].credit,&p[i].maxP,&p[i].surplusP);
        printf("%d\t%s\t%d\t%d\t%d",p[i].num1,p[i].name1,p[i].credit,p[i].maxP,p[i].surplusP);i++;
    }



2015-12-13 16:57
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
收藏
得分:0 
sscanf(str,"%[^|]|%s|%[^|]|%d|%d",&p[i].num1,p[i].name1,&p[i].credit,&p[i].maxP,&p[i].surplusP);
2015-12-13 16:58
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
收藏
得分:0 
初次接触C语言,查了一下正则表达式的用法,还是云里雾里的
2015-12-13 16:59
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:8 
不错,你总算把它拼出来了。现在初学可以不去管那个正则,以后学到再看,有本叫《精通正则表达式》的书。
正则表达式在处理文本匹配时很有用,在JS,C#这些都有相关的正则表达式类来支持使用,网页注册时邮箱验证。

象下面C语言里这样:
 /*9.提取邮箱地址*/  
    string = "Email:beijing@  
    sscanf(string, "%[^:]:%[^@]@%[^.].%s", buf1, buf2, buf3, buf4);  
    printf("9.string=%s\n", string);  
    printf("9.buf1=%s, buf2=%s, buf3=%s, buf4=%s\n\n", buf1, buf2, buf3, buf4);  
    /*

我们都在路上。。。。。
2015-12-13 17:26
行者昊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-12-12
收藏
得分:0 
学到了,谢谢
2015-12-13 22:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用行者昊在2015-12-13 16:59:38的发言:

初次接触C语言,查了一下正则表达式的用法,还是云里雾里的
这不是“正则表达式”,
2015-12-14 09:39
快速回复:看了帖子《如何读取一个文件把文件每行内容赋值给一个结构数组元素》, ...
数据加载中...
 
   



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

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