繁体   English   中英

从文本文件读取行到数组

[英]reading lines from text file into array

我有一个文本文件,其中包含以下行:

(0,0) -180.000  77.500  -999.000  -999.000  -999.000  2740.831  45.000  -0.001  -0.001  0.000 458.138 45.000  -999.000
(1,0) -179.500  77.500  -999.000  -999.000  -999.000  2740.831  45.000  -0.001  -0.001  0.000 458.138 45.000  -999.000
(2,0) -179.000  77.500  -999.000  -999.000  -999.000  2740.831  45.000  -0.001  -0.001  0.000 458.138 45.000  -999.000
(3,0) -178.500  77.500  -999.000  -999.000  -999.000  2740.831  45.000  -0.001  -0.001  0.000 458.138 45.000  -999.000
...
...
(359,0) -0.500  77.500  -999.000  -999.000  -999.000  2740.831  45.000  -0.001  -0.001  0.000 458.138 45.000  -999.000

我试图使用以下程序将此文本文件(buf)的每一行放入一个数组(buffarray)的单个元素中:

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

#define PI 4*atan2(1,1)

int main(int argc, char *argv[]) {
    FILE *fp;
    char buf[200];
    char *token;
    char buffarray[223920];
    char filename[150];
    int i, j, k;

    sscanf(argv[1], "%s", filename);

    if ((fp = fopen(filename, "rt")) == NULL) {
        printf("Failed in fopen: %s\n", filename);
        return -1;
    }

    while (!feof(fp)) {
        fgets(buf, 200, fp);
        token = buf;
        printf("buf is %s\n", buf);     
        buffarray++ = token;
    }
}

编译这个程序的每一个我收到一条错误信息:

translate_ww3file.c: In function ‘int main(int, char**)’:
translate_ww3file.c:30:12: error: lvalue required as increment operand
   buffarray++ = token;
        ^

我该如何解决这个问题? 理想情况下,我想创建另一个文本文件,其中重新排列行,以便在新文本文件中首先打印原始文本中的第180到359行,然后在新文本文件中打印出第1到179行。

多个问题:

  • PI宏没有正确括号。 它应该是#define PI (4*atan2(1,1))
  • while (!feof(fp))总是错的。 改为使用while (fgets(buf, 200, fp))
  • 你不能递增一个数组,你想用strcat(buffarray, token);连接数组末尾的字符串strcat(buffarray, token); 但是你必须在循环之前将buffarray[0]初始化为'\\0'

这是一个更正版本:

#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define PI  (4*atan2(1,1))

int main(int argc, char *argv[]) {
    FILE *fp;
    char buf[200];
    char *token;
    char buffarray[223920];
    char filename[150];

    if (argc < 2 || sscanf(argv[1], "%149s", filename) != 1) {
        printf("missing command line argument\n");
        return 1;
    }

    if ((fp = fopen(filename, "rt")) == NULL) {
        printf("Failed in fopen %s: %s\n", filename, strerror(errno));
        return 1;
    }

    *buffarray = '\0';
    while (fgets(buf, sizeof buf, fp)) {
        token = buf;
        printf("buf is %s\n", buf);     
        strcat(buffarray, token);
    }
    fclose(fp);

    printf("file contents:\n);
    fputs(buffarray, stdout);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM