C ++读取长的非分隔整数,将它们分开并放入二维数组

时间:2014-02-10 06:03:29

标签: c++ c text scanf

我有 numbers.txt m 行包含 n -digit整数:

185793290584395734589340920932
432904895929583224024902234023

我尝试使用 fscanf(),但无法定义格式(更多信息here)。

    FILE *fid;
fid = fopen("numbers.txt", "r");
int numbers[m][n];
for (int i = 0; i < m; i++){
    for (int j = 0; j < n; j++){
        int num;
        fscanf(fid,format,&num);
        numbers[i][j] = num;
    }
}

用户过去曾提出的类似问题似乎涉及分隔数据,而我的不是。

我希望能够获得表单的二维数组: =

1 8 5 7 9 3 2 9 0 5 8 4 3 9 5 7 3 4 5 8 9 3 4 0 9 2 0 9 3 2
4 3 2 9 0 4 8 9 5 9 2 9 5 8 3 2 2 4 0 2 4 9 0 2 2 3 4 0 2 3

3 个答案:

答案 0 :(得分:1)

使用fgetc

FILE *fid = fopen("numbers.txt", "r");
int numbers[m][n];
for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        numbers[i][j] = fgetc(fid) - '0';
    }
    fgetc(fid); // throw away new line
}

fscanf

FILE *fid = fopen("numbers.txt", "r");
int numbers[m][n];
for (int i = 0; i < m; i++) {
    char c[n + 1];  //an extra char for '\0'
    fscanf(fid, "%s", c);
    for (int j = 0; j < n; j++) {
        numbers[i][j] = c[j] - '0';
    }
}

答案 1 :(得分:0)

您是否在阵列的每个索引中存储每个数字?如果是,您可以使用“%c”,然后用“0”减去它。

答案 2 :(得分:0)

试试这个,

fscanf(fid, "%1d", &num);