Cześć!
Mam problem z wczytywaniem wejścia w C++, prawdopodobnie jest to jakaś głupota, ale że nie mam dużej styczności z C++, to nie mogę sobie poradzić.
Oto minimalny kod powodujący problem:
#include <cstdio>
int N, M;
int main() {
scanf("%d %d", &N, &M);
printf("Pierwsza linia: %d %d\n", N, M);
for (int i = 0;i < M;++i) {
int start, end, weight;
scanf("%d %d %d", &start, &end, &weight);
printf("Krawedz %d z %d do %d o wadze %d\n", i, start, end, weight);
fflush(stdout);
}
return 0;
}
Wczytuję po kolei liczby z pliku i wypisuję je. Plik wejściowy jest w załączniku, jest on dość spory, na mniejszych plikach problemu nie widzę.
Problem jest następujący: w linii 305-306 wejścia mam coś takiego:
235 299 1570
546 129 1935
Jednocześnie program dla tych linii wypisuje:
Krawedz 303 z 235 do 299 o wadze 1570546
Krawedz 304 z 129 do 1935 o wadze 129
Czyli wczytał 1570, zignorował znak nowej linii i dokleił 546 do liczby. Sprawdzałem w Notepad++ i jest tam normalny znak nowej linii (CRLF). Program odpalam z PS tak:
cat "orders05.in" | .\Rozkazy.exe | out-file -encoding ascii "orders05.ans"
Jednocześnie jeżeli w VS 2015 w konfiguracji projektu ustawię w parametrach debugowania przekierowanie pliku jako standardowe wejście i odpalę program przez CTRL+F5, to wszystko jest wczytywane poprawnie. Problem występuje tylko przy uruchamianiu programu z konsoli, próbowałem różnych buildów (debug/release, 32/64 bitowy), próbowałem odpalać program z PS i CMD, za każdym razem jest ten sam błąd. Wrzuciłem kod na ideone i wkleiłem tam plik wejściowy — tam problem nie występuje. Próbowałem zmienić scanf na cin, nie pomogło.
Nie mam pojęcia, co jest nie tak. W załącznikach dodaję też skompilowaną binarkę w trybie debug x64 wraz z symbolami, gdyby ktoś chciał ją dokładniej podebugować. Będę wdzięczny za jakieś sugestie.