Project1

标题: 有关C语言读取txt的问题,谁可以帮忙一下? [打印本页]

作者: enghao_lim    时间: 2011-3-17 20:19
标题: 有关C语言读取txt的问题,谁可以帮忙一下?
假设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,要啥悬赏还是写脚本的尽管开口吧,做到范围内定当尽力。
作者: yangff    时间: 2011-3-17 20:36
量不大的话用cin吧(文件就是fin)(C++)
或者用%c暴力处理……
或者fgets吃掉一行
或者……fscanf( , "%[^\n]%*c", ) 同上


作者: enghao_lim    时间: 2011-3-17 21:15
回复 yangff 的帖子

其他的资料我还要用的,能暴利吃掉一行我早吃了。
现在麻烦的是需要把A100, Super Man, 10, 20, 30, 40, 50分开出来存入不同的数组,快疯了……
作者: yangff    时间: 2011-3-17 21:31
enghao_lim 发表于 2011-3-17 21:15
回复 yangff 的帖子

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

我知道啊,但是你可以一行吃掉然后慢慢处理啊
作者: enghao_lim    时间: 2011-3-17 21:40
回复 yangff 的帖子

抱歉,没注意到这点。
不过c我不熟悉,先试试看好了。
作者: 苏小脉    时间: 2011-3-18 00:22
#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;
}
作者: enghao_lim    时间: 2011-3-18 04:44
回复 苏小脉 的帖子

虽然有点看不明白,不过测试后是行得通的,抱走研究,谢啦。
不过话说那个chomp_space是用来去掉多于字符用的?这个有看没懂。
作者: 苏小脉    时间: 2011-3-19 00:02
enghao_lim 发表于 2011-3-18 04:44
回复 苏小脉 的帖子

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

因为之前用 fscanf 的时候接受的字符组是 [A-Za-z ],其中包含了空格,所以会连名字末尾的空格也读取进来,需要去掉~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1