infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Paul Diac din Ianuarie 27, 2006, 17:14:23



Titlul: Sfarsit de linie in linux..?
Scris de: Paul Diac din Ianuarie 27, 2006, 17:14:23
Poate sa-mi explice si mie cineva care sunt diferentele dintre "\n"-ul din linux, si cel din windows? Daca eu fac un test (.in) in windows, il copii in linux si sursa merge pe el. Daca fac unul nou insa in linux, cu acelasi continut (dar sterg cel vechi inainte, si apoi il rescriu) nu mai merge. In schimb pot sa "repar" sursa astfel incat sa mearga pe testul din linux, dar nu mai merge pe cel din windows. Sursa mea citeste un sir cu 'fgets', si afla lungimea sirului cu un for, si de aici apar probleme. Ce sursa sa trimit (pt .campion)? Pe cea care raspunea la testele din linux, sau pe ceva care raspundea la testele din windows? daca rulez un generator de teste in linux/windows, apare lafel diferenta...
   Nu prea am reusit sa ma prind de chestia asta, in linux oricum nu afiseaza '\n'-ul ca un caracter, afiseaza ceva de genul ' ^M'. Tare nu vreau sa pierd 100 puncte pe chestia asta.
 Multumesc anticipat.


Titlul: Sfarsit de linie in linux..?
Scris de: cristi8 din Ianuarie 28, 2006, 01:02:40
ai putea sa vezi exact ce iti citeste fgets, sa aflii unde e diferenta si eventual sa tratezi ambele cazuri..
din cate stiu, endline-ul din Windows e defapt "\r\n".. e defapt un caracter in plus. Daca deschizi fisierul .in cu un hex viewer ai sa vezi.
deci incearca sa afisezi codul ascii la ce ai citit cu fgets (pe un test usor) si vezi diferentele.


Titlul: Sfarsit de linie in linux..?
Scris de: ditzone din Ianuarie 28, 2006, 10:00:08
Sau poti folosi scanf("%s"... pentru a citi stringuri.. asa o sa mearga pentru ambele fisiere ...


Titlul: Sfarsit de linie in linux..?
Scris de: Paul Diac din Ianuarie 28, 2006, 11:03:13
Da... scanf("%s") merge pentru ambele variante, insa nu citeste spatiile, adica le ignora. Ce-i drept acum, adica la problema asta nu conteaza asa ca o sa folosesc fscanf probabil. Am testat insa putin si sa vad si cu fgets-ul, fisierele create in linux au la sfarsitul liniilor doar caracterul numarul '10' din tabela ascii, iar cele din windows au caracterul '13' si apoi '10' din tabela. Deci daca ar trebui sa citesc si spatii as trata abele cazuri (defapt scot afara caracterul '10' de la sfarsit, si apoi scot caracterul '13' daca este). Cei care fac testele, in general, ruleaza generatoarele in linux sau windows? La ultima runda de la campion, fisierele din arhiva au doar caracterul '10' la sfarsit, deci probabil sunt generate in windows, si tot aia ar fi daca as trata ambele cazuri, dar oricum cred ca e bine de stiut de asta.  :wink:


Titlul: Sfarsit de linie in linux..?
Scris de: Mircea Pasoi din Ianuarie 28, 2006, 11:17:48
Eu nu mi-am pus vreodata problema asta.. am folosit pana acum fgets() fara problemele si pe Windows si pe Linux. Lungimea poti s-o aflii cu strlen() si nu cred ca mai apar probleme.