Объединение строк C ++ в подсистеме Windows для Linux (WSL) приводит к удалению первой строки - PullRequest
0 голосов
/ 09 мая 2020

Мне нужна помощь в понимании того, что не так с моим кодом или системой. По какой-то причине при компиляции и запуске в WSL (Windows Подсистема для Linux) следующий код генерирует неверный результат. При запуске непосредственно в командном терминале windows он правильно генерирует окончательный вывод как HNDPNV, а в WSL генерирует PNV. Файл аэропортов - это просто серия из 50 строк, по 3 буквы в каждой. Версия g ++ - 7.5.0 в ubuntu 18.04 WSL, а версия g ++ windows - 9.2.0.

флаги компиляции: g ++ -std = c ++ 17 -Wall -Wextra -o test test. cpp

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>

using namespace std;


int main() {

    string airport_designations[50];
    string air_companies_designations[20];

    ifstream airports;
    ifstream aircompanies;
    string name = "apple";
    string name2 = "orange";

    airports.open("Airports.txt");
    for (int i = 0; i < 50; i++){

        getline(airports, airport_designations[i]);
        cout << airport_designations[i] << endl;

    }
    airports.close();

    aircompanies.open("Companies.txt");
    for (int i = 0; i < 20; i++){

        getline(aircompanies, air_companies_designations[i]);
        cout << air_companies_designations[i] << endl;

    }
    aircompanies.close();

    name = airport_designations[4];
    cout << name << endl;
    name += airport_designations[8];
    cout << name << endl;

}

1 Ответ

0 голосов
/ 09 мая 2020

Разрыв строки на windows равен \ r \ n, на Linux \ n. Чтобы получить согласованный вывод, вам нужно заменить все \ r \ n в файле Airports.txt на \ n.

...