| Autor |
Nachricht |
hm..
Unregistrierter
|
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
|
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
|
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
|
SeppJ Moderator
22:03:25 07.09.2010 Titel: |
|
Zitieren |
|
 |
fr33g
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.01.2010
Beiträge: 803
|
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
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
|
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
|
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
|
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
|
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
|
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 |
|
 |