Массив из Паскаля на C++

Ниже приведён код на паскале, который я хочу переписать под C++.
На паскале в writeln(code); выводится:
1 3 7 23
Но на C++ получается это:
1 3 7 15 31 63
Не могу понять в чём проблема и как это исправить.
Буду признателен если поможете разобраться в проблеме

Паскаль:

program zadanie;
const
  magic: array [1..3, 1..3] of byte =
  ((1, 2, 4),
  (2, 8, 16),
  (4, 16, 32));
var
  n, code: longint;
  can: array [1..3, 1..3] of boolean;
  total: array [0..1, 1..3, 0..63] of real;
  answer: real;
  filein,fileout:string;
procedure readdata;
var
  s: string;
begin
  readln(n);
  for var u := 1 to 3 do
  begin
    readln(s);
    for var p := 1 to 3 do
      if upcase(s[p]) = 'Y' then
      begin
        can[u, p] := true;
        can[u, p] := true;
      end
  end
end;
procedure findcode;
begin
  {переводим диаграмму смежности в число}
  code := 0;
  for var u := 1 to 3 do
    for var p := u to 3 do
      if can[u, p] then
        begin
        code := code + magic[u, p];
        writeln(code);
        end
end;
begin
  writeln('Введите путь, откуда будут браться данные:');
  readln(filein);
  writeln('Введите путь, куда будут сохраняться данные:');
  readln(fileout);
  writeln('Данные записаны в ведённый Вами файл!');
  assign(input,filein);
  assign(output,fileout);
  readdata;
  findcode;
end.

C++:

int main()
{
    setlocale(LC_ALL, "Russian");
    string filein, fileout;
    unsigned char magic[3][3] = {
    {1, 2, 4},
    {2, 8, 16},
    {4, 16, 32}};
    string num[100];
    int n;
    int u;
    int p;
    int can[3][3];
    string a[3][3];

    cout << "Введите путь, откуда будут браться данные" << endl;
    cin >> filein;
    cout << "Введите путь, куда будут сохраняться данные" << endl;
    cin >> fileout;
    string s;
    ifstream input(filein, ios::in);
    string firstline;
    getline(input, firstline);
    n = stoi(firstline);
    while (!input.eof()) {
        string temp;
        getline(input, temp);
        s += temp;
    };
    input.close();

    int l = 0;
    for (u = 0; u < 3; u++) {
        for (p = 0; p < 3; p++) {
            a[u][p] = s[l];
            if (a[u][p] == "Y") {
                can[u][p] = true;

            }
            s[l++];
        } 
    }
    long code = 0;
    for (int u = 0; u < 3; u++) {
        for (int p = u; p < 3; p++) {
            if (can[u][p]) {
                code += magic[u][p];
                cout << code << "\n";
            }
        }
    }
    system("pause");

    return 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.