Чтение файла 1 и 0 по одному - PullRequest
0 голосов
/ 10 ноября 2018

В C ++ я пытаюсь прочитать из следующего файла в массив:

0000000000
0000000000
0000000000
0001110000
0001010000
0001110000
0000000000
0000000000
0000000000
0000000000

Я использую следующее для помещения каждого int в массив:

  X = (int* )malloc(n*n*sizeof(int));
  for (int i = 0; i<(n*n); i++){
    j = read.get();
    if (isdigit(j)){
        *(X+i) = j - '0';
    }
  }

Но когда я вывожу в массив в файл, я получаю следующий вывод:

0000000000
0000000000
0000000000
0000001110
0000000101
0000000011
1000000000
0000000000
0000000000
0000000000

И я не верю, что с выводом массива что-то не так:

for (int i = 0; i<(n*n); i++){
      write << *(X+i);
      if (((1+i) % n) == 0){
        write << endl;
      }
}

Я пытался читать со следующим, но это не сработало:

for (int i = 0; i<(n*n); i++)
        {
            read >> *(X+i);
        }

1 Ответ

0 голосов
/ 10 ноября 2018

Проблема в том, что вы увеличиваете i, даже если isdigit(j) ложно.Таким образом, вы оставляете элементы массива, соответствующие символам новой строки в файле, неинициализированными, а также не читаете все цифры, потому что подсчитываете строки.Вам нужно поместить приращение в if.

for (int i = 0; i < n*n; ) {
    char j = read.get();
    if (isdigit(j)) {
        X[i++] = j - '0';
    }
}

BTW, если вы используете указатель в качестве массива, используйте синтаксис массива X[index] вместо *(X+index).Это делает намерение более ясным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...