如何从文件中读取字符串并将其放入2d数组表中。 文本文件:
0 0/0a 1/0b 2/0c 3/0d 4/0e 5/99
1 0/0b 1/0b 2/99 4/0c 5/99
所以,0是第一行, 0 / 0a表示(0)是第一列,(0a)插入(0,0)
所以,1是第二行。 4 / 0c表示(4)是第四列,(0c)插入(1,4)
99表示00,应替换为00。 如果缺少该列(例如第二行,则没有第3列,应该放置为00)。
期待输出:
0 1 2 3 4 5
0 0a 0b 0c 0d 0e 00
1 0b 0b 00 00 0c 00
我到目前为止所做的代码:
int main(int argc, char*argv[]){
FILE *fp;
fp = fopen(argv[1], "r");
if(fp==NULL) return 1;
printf("File is open successfully.\n");
char *ptr, buf[256];
while((ptr = fgets(buf, 256, fp)) != NULL){
printf("%s", ptr);
}
fseek ( fp, 0, SEEK_SET);
}
我只是有点失落,从哪里开始。任何帮助都会很棒。感谢。
答案 0 :(得分:0)
如果列数可能小于6(0到5),那么您应该使用strtok
拆分该行,使用简单的"%d"
获取行号,最后打印空行如果行号向前跳过(如果它向后跳过则是错误的。)
然后,您使用"%d/%x"
逐步读取列,将最终跳过的列设置为0,如果列为0x99,则将列设置为0(读为hexa ...)。
这是我的代码:
#include <stdio.h>
#include <string.h>
#define MAX 6
int main(int argc, char *argv[]) {
FILE *fp;
int data[MAX];
char *ptr, buf[256], *ix;
int line = 0, i, j, col = MAX;
fp = fopen(argv[1], "r");
if(fp==NULL) return 1;
printf("File is open successfully.\n");
while((ptr = fgets(buf, 256, fp)) != NULL){
// printf("%s", ptr);
ix = strtok(buf, " ");
if (ix == NULL) break;
if ((sscanf(ix, "%d%*c", &i) != 1) || (i < line)) {
fprintf(stderr, "Error line %d indicated as %d\n", line, i);
return 1;
}
while (line < i) {
for(j=0; j<col; j++) printf(" 00");
printf("\n");
}
col = 0;
while (ix = strtok(NULL, " ")) {
if (col >= MAX) {
fprintf(stderr, "Too much elements line %d (more than %d)\n", line, MAX);
return 2;
}
if ((sscanf(ix, "%d/%x", &i, &j) != 2) || (col > i)){
fprintf(stderr, "Incorrect syntax line %d elt %d\n", line, col);
return 3;
}
while(col < i) data[col++] = 0;
if (j == 0x99) j = 0;
data[col++] = j;
}
for(j=0; j<col; j++) printf(" %02x", data[j]);
printf("\n");
line++;
}
fclose(fp);
}