Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Sfarsit de linie in linux..?  (Citit de 1876 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
diac_paul
Echipa infoarena
Nu mai tace
*****

Karma: 13
Deconectat Deconectat

Mesaje: 210



Vezi Profilul
« : 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.
Memorat
cristi8
Vizitator
« Răspunde #1 : 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.
Memorat
ditzone
Vizitator
« Răspunde #2 : Ianuarie 28, 2006, 10:00:08 »

Sau poti folosi scanf("%s"... pentru a citi stringuri.. asa o sa mearga pentru ambele fisiere ...
Memorat
diac_paul
Echipa infoarena
Nu mai tace
*****

Karma: 13
Deconectat Deconectat

Mesaje: 210



Vezi Profilul
« Răspunde #3 : 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
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #4 : 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.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines