Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Frage zu cin  
Gehen Sie zu Seite 1, 2, 3  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
hm..
Unregistrierter




Beitrag hm.. Unregistrierter 21:45:36 07.09.2010   Titel:   Frage zu cin            Zitieren

Warum funktioniert das?

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
int main()
{
   char lBuf[2];
   while(true)
   {
      cout << ">";
      cin >> lBuf;
      cout << lBuf << endl;
   }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
int main()
{
char lBuf[2];
while(true)
{
cout << ">";
cin >> lBuf;
cout << lBuf << endl;
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
int main()
{
   char lBuf[2];
   while(true)
   {
      cout << ">";
      cin >> lBuf;
      cout << lBuf << endl;
   }
}


Ist sowas legitim? Oder ruft das Fehler hervor? (vermute ich jetzt mal)
Würde es halt gerne verstehen ;)
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 12055
Beitrag SeppJ Moderator 21:56:30 07.09.2010   Titel:              Zitieren

Kannst du sagen, was du daran nicht verstehst? Ich muss erst neuen Kaffeesatz aufsetzen, bevor ich wieder Wahrsagen kann.

Der Code provoziert übrigens Fehler, wenn zwei oder mehr Nicht-Whitespace-Zeichen nacheinander eingegeben werden.
nööööö
Unregistrierter




Beitrag nööööö Unregistrierter 22:02:05 07.09.2010   Titel:              Zitieren

Das stimmt nicht, habe es gerade probiert und es wird kein Fehler produziert. So was nennt sich dann bloß undefiniertes Verhalten das nur fehleranfällig ist aber logisch gesehen ist der Code fehlerfrei und produziert auch nicht immer einen Fehler bei mehr als 2 Zeichen.

Bitte nicht schreiben wenn man es nicht wirklich verstanden hat, danke.
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 12055
Beitrag SeppJ Moderator 22:03:25 07.09.2010   Titel:              Zitieren

:rolleyes:
fr33g
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.01.2010
Beiträge: 803
Beitrag fr33g Mitglied 22:23:56 07.09.2010   Titel:              Zitieren

nööööö schrieb:
...So was nennt sich dann bloß undefiniertes Verhalten das nur fehleranfällig ist...


Der Satz ist ja mal geil, les dir den nochmal durch ;)
Ist ja nicht so, als wäre undefiniertes Verhalten allein schon ein Fehler :D

Lg freeG


Zuletzt bearbeitet von fr33g am 22:25:46 07.09.2010, insgesamt 1-mal bearbeitet
HAWXthy
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.08.2010
Beiträge: 30
Beitrag HAWXthy Mitglied 15:51:56 08.09.2010   Titel:              Zitieren

Kommt darauf an mit welchem Compiler du den Code compilierst, weil nicht jeder Compiler comipliert eine function die etwas zurück geben soll, dies jedoch nicht tut (return 0; in dem fall).
Das Porgramm ansich sollte funktionieren bis auf die Tatsache das nur maximal 2 chars in dein array eingelesen werden können und das ganze in einer Endloseschleife läuft.
Michael E.
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.10.2003
Beiträge: 5049
Beitrag Michael E. Mitglied 15:57:30 08.09.2010   Titel:              Zitieren

HAWXthy schrieb:
Kommt darauf an mit welchem Compiler du den Code compilierst, weil nicht jeder Compiler comipliert eine function die etwas zurück geben soll, dies jedoch nicht tut (return 0; in dem fall).

Für main ists laut Standard erlaubt.

_________________
Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.01.2007
Beiträge: 5048
Beitrag asc Mitglied 15:58:10 08.09.2010   Titel:              Zitieren

HAWXthy schrieb:
...weil nicht jeder Compiler comipliert eine function die etwas zurück geben soll, dies jedoch nicht tut (return 0; in dem fall).


int main ist eine Ausnahme. int main gibt, wenn man kein explizites return angibt, ein return 0 zurück.

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 12055
Beitrag SeppJ Moderator 15:58:20 08.09.2010   Titel:              Zitieren

HAWXthy schrieb:
Kommt darauf an mit welchem Compiler du den Code compilierst, weil nicht jeder Compiler comipliert eine function die etwas zurück geben soll, dies jedoch nicht tut (return 0; in dem fall).
In C++ ist die main-Funktion eine Ausnahme. Die gibt automatisch 0 zurück, wenn man nichts hinschreibt.
Zitat:

Das Porgramm ansich sollte funktionieren bis auf die Tatsache das nur maximal 2 chars in dein array eingelesen werden können und das ganze in einer Endloseschleife läuft.
Naja, man sollte aber noch erwähnen, dass vom istream bei der Operation auch noch ein Nullzeichen angehängt wird. Das muss auch noch in das Array passen (sonst wird es einfach dahinter geschrieben, wodurch wer weiß was überschrieben wird), also hat man effektiv nur Platz für ein eingegebenes Zeichen.
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 12055
Beitrag SeppJ Moderator 15:58:20 08.09.2010   Titel:              Zitieren

edit: Doppelpost


Zuletzt bearbeitet von SeppJ am 15:58:45 08.09.2010, insgesamt 1-mal bearbeitet
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Frage zu cin  
Gehen Sie zu Seite 1, 2, 3  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.