【问题标题】:C++ Reading Long Non-delimited Integers, Separating Them and Putting into a 2d ArrayC ++读取长的非定界整数,将它们分开并放入二维数组
【发布时间】:2014-02-10 06:03:28
【问题描述】:

我有一个 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

【问题讨论】:

  • @Duck,我认为他不想打印出来。我认为 A.L. 想要存储 2D 数组并对其进行计算。
  • 这是 C 还是 C++?有一些方法可以解决这两种语言特有的问题。

标签: c++ c text scanf


【解决方案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';
    }
}

【讨论】:

  • - '0' 有什么作用?
  • @A.L,您正在阅读char。字符'0'48,字符'A'65,等等。减去'0' 将字符'0' (48) 转换为整数值0,字符'1' (49) 到整数值1
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试这个,

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

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2013-04-04
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多