设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2810|回复: 7
打印 上一主题 下一主题

[已经过期] 有关C语言读取txt的问题,谁可以帮忙一下?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
跳转到指定楼层
1
发表于 2011-3-17 20:19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
假设txt里内容格式为:
A100 Super Man 10 20 30 40 50
A101 Ali Bin Mohd Jaafar 15 25 35 45 55
....

现在问题是Super Man和Ali Bin Mohd Jaafar都是人名,fscanf的%s怎样也读不出空格,这下我很头痛了,谁能够帮忙看一下啊?我接触C只有3个小时,头痛死了……帮帮忙吧T^T,要啥悬赏还是写脚本的尽管开口吧,做到范围内定当尽力。

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

2
发表于 2011-3-17 20:36:05 | 只看该作者
量不大的话用cin吧(文件就是fin)(C++)
或者用%c暴力处理……
或者fgets吃掉一行
或者……fscanf( , "%[^\n]%*c", ) 同上

哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
3
 楼主| 发表于 2011-3-17 21:15:29 | 只看该作者
回复 yangff 的帖子

其他的资料我还要用的,能暴利吃掉一行我早吃了。
现在麻烦的是需要把A100, Super Man, 10, 20, 30, 40, 50分开出来存入不同的数组,快疯了……
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

4
发表于 2011-3-17 21:31:53 | 只看该作者
enghao_lim 发表于 2011-3-17 21:15
回复 yangff 的帖子

其他的资料我还要用的,能暴利吃掉一行我早吃了。

我知道啊,但是你可以一行吃掉然后慢慢处理啊
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
5
 楼主| 发表于 2011-3-17 21:40:55 | 只看该作者
回复 yangff 的帖子

抱歉,没注意到这点。
不过c我不熟悉,先试试看好了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
6
发表于 2011-3-18 00:22:40 | 只看该作者
#include <stdio.h>
#include <string.h>

#define ID_LEN      5
#define NUM_LEN     5
#define NAME_LEN    64

#define FILENAME    "1.txt"

void chomp_space(char* str);

void main() {
    char id[ID_LEN];
    char name[NAME_LEN];
    int num[NUM_LEN];
    FILE* file = fopen(FILENAME, "r");

    while (fscanf(file, "%s ", id) != EOF) {
        int i;
        fscanf(file, "%[A-Za-z ]", name);
        chomp_space(name);
        for (i = 0; i < NUM_LEN; ++i)
            fscanf(file, "%d", num + i);

        printf("Id: %s, Name: %s, Nums: ", id, name);
        for (i = 0; i < NUM_LEN; ++i)
            printf("%d ", *(num + i));
        printf("\n");
    }
}

void chomp_space(char* str) {
    char* c;
    for (c = str; *c != 0; ++c)
        ;
    for (c -= 1; *c == ' '; --c)
        ;
    *(c + 1) = 0;
}

评分

参与人数 3星屑 +820 收起 理由
柳之一 + 360 好麻烦
zh99998 + 400 你是一个好人
enghao_lim + 60 小小感激^^

查看全部评分

[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
7
 楼主| 发表于 2011-3-18 04:44:56 | 只看该作者
回复 苏小脉 的帖子

虽然有点看不明白,不过测试后是行得通的,抱走研究,谢啦。
不过话说那个chomp_space是用来去掉多于字符用的?这个有看没懂。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
8
发表于 2011-3-19 00:02:36 | 只看该作者
enghao_lim 发表于 2011-3-18 04:44
回复 苏小脉 的帖子

虽然有点看不明白,不过测试后是行得通的,抱走研究,谢啦。

因为之前用 fscanf 的时候接受的字符组是 [A-Za-z ],其中包含了空格,所以会连名字末尾的空格也读取进来,需要去掉~
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 12:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表