| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1937 人关注过本帖
标题:读文件的问题。。。
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

// 我比较喜欢写成 pf,个人习惯

#include <stdio.h>
#include <stdlib.h>

void Error(int i, char * str)
{
    if(!i)
    {
        fprintf(stderr, "\a%s\n    ", str);
        system("Pause");
        exit(1);
    }
}

int main(void)
{
    int i;
    int ar[3];
    char arStr[3][80];

    FILE * pf;
   
    pf = fopen("test.txt", "r");
    Error(pf != NULL, "文件不存在!");

    for(i = 0; i < 3 && (fscanf(pf, "%s %d", arStr[i], ar + i) == 2); i++)
        printf("%s %d\n", arStr[i], ar[i]);

    fclose(pf);
    system("Pause");
    return 0;
}


[[it] 本帖最后由 cosdos 于 2008-5-3 20:21 编辑 [/it]]

—>〉Sun〈<—
2008-05-03 19:31
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
fp=fopen("test.txt","r")==NULL
应加上括号
(fp=fopen("test.txt","r"))==NULL
--------------------------------
奇怪,为什么不吃换行符,也能正常读取下一行的内容,
难道不需要吃吗?

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-05-03 19:33
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
确实如12楼所说 (括号)

    for(i = 0; i < 3; i++)
    这样的话如果文件中的数据不满3行或者数据不是要求的数据,就会出现乱码,11楼的代码中利用fscanf()函数的返回值解决这个问题。

fscanf() 返回成功读取的项目的个数。

//

[[it] 本帖最后由 cosdos 于 2008-5-3 19:40 编辑 [/it]]

—>〉Sun〈<—
2008-05-03 19:38
zhaozhiwei
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-19
收藏
得分:0 
结果是可以了,谢了啊,我先消化一下

择晴日,访友欢。无限天涯各一边,亲谊心相连。品美食,游山川。闲来无事灌论坛,幸福至年年。
2008-05-03 19:40
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
为何,没人理我??

为什么不吃换行符,也能正常读取下一行的内容,
难道不需要吃吗?

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-05-03 19:41
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
==号的优先级别是最低的啊!
2008-05-03 19:43
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
[bo]以下是引用 [un]zhaoyg[/un] 在 2008-5-3 19:33 的发言:[/bo]

fp=fopen("test.txt","r")==NULL
应加上括号
(fp=fopen("test.txt","r"))==NULL
--------------------------------
奇怪,为什么不吃换行符,也能正常读取下一行的内容,
难道不需要吃吗? ...


fscanf("%s %d", str[i], ar + i);
这样读取数据的话回车被忽视了,因为回车被当成空白字符(空格和制表符等)。

—>〉Sun〈<—
2008-05-03 19:43
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
fscanf("%s %d", str[i], ar + i);
这样读取数据的话回车被忽视了,因为回车被当成空白字符(空格和制表符等)。
-------------------------------------------
我愿意为只有在%s前加个空格才能忽略空白字符
即fscanf(" %s %d", str[i], ar + i);

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2008-05-03 19:48
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    FILE *fp;
    char ch;
    if((fp=fopen("test.txt", "r"))==NULL)
    {
        printf("文件不成立!");
        exit(0);
    };
   
    while((ch=fgetc(fp))!=EOF)
    {
        ((ch&0x80)==0)?putchar(ch):putchar(ch),putchar(fgetc(fp));
          
    }
   
    fclose(fp);
    system("Pause");
    return 0;

}

[[it] 本帖最后由 sunkaidong 于 2008-5-3 19:54 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-03 19:50
zhaozhiwei
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-19
收藏
得分:0 
按您刚才讲的 那我这样控制循环为什么会丢失第一条记录
for(i = 0; i <(fscanf(pf, "%s %d", arStr[i], ar + i)) ; i++)

择晴日,访友欢。无限天涯各一边,亲谊心相连。品美食,游山川。闲来无事灌论坛,幸福至年年。
2008-05-03 20:03
快速回复:读文件的问题。。。
数据加载中...
 
   



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

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