C存储数组中文本文件的编号

时间:2017-01-06 16:10:48

标签: c file

嗨,我有这个文本文件 现在我想只在数组中存储数字,我怎么能用c语言?

www.google.com *** 64
www.victoria.org **** 118
www.example.org *** 120

2 个答案:

答案 0 :(得分:1)

这应该这样做:

#include <stdio.h>

// read in up to 10 lines
int LINES[10];

int main(){
    int current = 0;

    // open file for reading
    FILE* file;
    file = fopen("file.txt", "r");

    // read whole file one char at a time
    while (1){
        char ch;
        if(!fread(&ch, 1, 1, file)){
            break;
        }

        if (ch >= '0' && ch <= '9'){
            int val = ch - '0';

            LINES[current] *= 10;
            LINES[current] += val;
        }else if (ch == '\n'){
            current += 1;
        }
    }


    // Looping over the results
    for (int i = 0; i <= current; i += 1){
        printf("Line %d = %d\n", i, LINES[i]);
    }
}

答案 1 :(得分:0)

有多种方法可以做到这一点。

一种方法是使用fgetc一次将数字读入一个临时char[]数组中的一个字符,然后使用int将其转换为atoi()

要测试字符是否为整数,您可以使用<ctype.h>中的isdigit函数,或者只需测试ch >= '0' && ch <= '9',无论哪种方式都有效。

以下是一些示例代码:

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

#define NUMLINES 10
#define NUMLEN 5

int main(void) {
    FILE *fp;
    int LINES[NUMLINES], i, count = 0, ch, blen = 0;

    /* static temp buffer, make it bigger if integers will be more than 5 digits */
    /* dynamic memory allocation always possible here */
    char buffer[NUMLEN+1];

    /* opening the file, with error checking */
    fp = fopen("urls.txt", "r");
    if (!fp) {
        fprintf(stderr, "%s\n", "Error reading file");
        return 1;
    }

   /* read each character until EOF */
    while ((ch = fgetc(fp)) != EOF) {

        /* digit found. add to temp buffer */
        if (isdigit(ch)) {
            buffer[blen++] = ch;
        }

        /* stop adding to buffer, now convert and add to array */
        if (ch == '\n') {
            buffer[blen] = '\0';
            LINES[count++] = atoi(buffer);
            blen = 0;
        }
    }

    /* print the array */
    for (i = 0; i < count; i++) {
        printf("LINES[%d] = %d\n", i, LINES[i]);
    }

    return 0;
}

应该输出:

LINES[0] = 64
LINES[1] = 118
LINES[2] = 120