2013-01-12 9 views
6

Die cout-Anweisung in dieser for-Schleife:C++ cout Überschreiben selbst, während in für Schleife

for (vector<Student>::iterator qw = students.begin(); qw != students.end(); ++qw){ 
    Student a = *qw; 
    name = a.getName(); 
    regno = a.getRegNo(); 
    std::cout << "Name: "<< name << " Reg Number: " << regno << endl; 
} 

einige seltsame Verhalten schafft, was die cout etwas gedruckt werden soll wie folgt aus:

Name: Mike Sanderson Reg-Nummer: 10101

jedoch, die er druckt tatsächlich aus es:

Reg-Nummer: 10101on

Es scheint mir, dass nach dem zweiten Teil der cout-Anweisung an den Anfang der Zeile geht zurück und überschreiben selbst, aber warum? Hope you guys können mir helfen und wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen!

+2

'Student' würde nicht zufällig einen Zeiger darin haben, der dynamischen Speicher zugeteilt wird, während er der Regel von drei nicht folgt, würde es? – chris

+1

Welcher Typ ist 'name'? Was gibt 'a.getName()' zurück? (Setzen Sie einen Debug-Breakpoint direkt vor der 'cout'-Zeile und sehen Sie, was in 'name' und' regno' steht.) –

+0

@DavidSchwartz ja ich hätte das leider tun sollen, name ist ein std :: string und a.getName() gibt zurück eine std.string zu –

Antwort

15

Dies ist, was das Wagenrücklaufzeichen tut (also \r in einem String-Literal). Ich nehme an, name String hat eine \r am Ende davon. Sie müssen herausfinden, wie es dort angekommen ist und es entfernen.

Ich vermute, dass Sie vielleicht die Namen aus einer Datei lesen, und diese Datei wurde unter Windows erstellt, die Zeilen mit \r\n standardmäßig beendet. C++ wird normalerweise die Umwandlung zwischen Zeilenenden für Sie beim Lesen aus einer Textdatei behandeln, aber wenn Sie die Datei als Binärdatei lesen und \n als Trennzeichen verwenden, haben Sie dieses Problem. Die \r wird gelesen, als ob es Teil der Zeile wäre.

+0

Ich dachte, es war da aus zufälligen Speicher als eine Konsequenz meines Kommentars: p – chris

+0

Danke, ich werde es sehen, es sollte nicht tun, aber seltsame Dinge sind passiert –

+0

@ZacPowell, Buchung Ihrer Klasse wäre ein guter Anfang. – chris