在C中读取格式化数据

时间:2018-04-25 00:11:20

标签: c scanf

我有一个特定格式的数据集,我想用C读取,也可以用某种格式打印。以下是我在文本文件中的数据格式:

sample[0][0]=1; sample[0][1]=3;
sample[1][0]=2; sample[1][1]=4;
sample[2][0]=3; sample[2][1]=5;

我希望阅读此内容并返回

  (*inputs)[0][0] = 1;   (*outputs)[0]=3;
  (*inputs)[1][0] = 2;   (*outputs)[1]=4;
  (*inputs)[2][0] = 3;   (*outputs)[2]=5;

我能够编写一个代码,它将以下列格式读取我的文件:

1 3
2 4
3 5

这是我的代码:

int main() {
FILE *samples;
samples = fopen ("peaks.txt","r");

int arr[10][2];
int i;
int j;
for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        fscanf(samples, "%d, ", &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

}

如何修改此代码以阅读上述格式?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以阅读,例如第一行数据

fscanf(filein, "sample[0][0]=%d; sample[0][1]=%d;", &arr[0][0], &arr[0][1]);

但它非常脆弱,因为如果输入文件不完全那么你会得到不可预测的行为

你可以用

打印出来
printf("(*inputs)[0][0] = %d;   (*outputs)[0]=%d;", arr[0][0], arr[0][1]);

但可能我的打印声明错误,因为我不确切地知道您希望代码做什么。

现在有很多数据......

新版本...更简单...... D&#39;哦!

int a,b;

for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        fscanf(samples, "sample[%d][%d]=\%d;", &a, &b, &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

所以现在你从样本中读取ab的数字值 - 但是后来没有使用ab的这些值 - 尽管要编写一个好的程序,您可以检查ab的值是否等于ij

旧的不工作版本

char* string_input[100]; // we need this to get the right format for scanf...

for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        sprintf(string_input, "sample[%d][%d]=\%d;", i, j)
        fscanf(samples, string_input, &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

所以这样做是为了让泰勒制作的字符串适合逐行读取数据......

例如,如果i=8j=1,那么string_input将是sample[8][1]=%d;