[英]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.