 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
M.Schneider Guest
|
Posted: Mon Jun 07, 2004 7:51 pm Post subject: while vergleich??? |
|
|
warum fehlermeldung?Die while Schleife soll das erste Zeichen im
Zeichenarray test mit Q vergleichen.Wo liegt mein Fehler?
char test[100]="Tach";
..
..
while( test[0] != "Q")
{
scanf("%s",test);
..
..
irgendwas
}
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Breuer Guest
|
Posted: Mon Jun 07, 2004 9:23 pm Post subject: Re: while vergleich??? |
|
|
M.Schneider wrote:
| Quote: | warum fehlermeldung?Die while Schleife soll das erste Zeichen im
Zeichenarray test mit Q vergleichen.Wo liegt mein Fehler?
char test[100]="Tach";
..
..
while( test[0] != "Q")
{
|
test[0] => Typ char
"Q" => Typ const char*
Du vergleichst einen Zeiger mit einen char.
Lösung:
while( test[0] != 'Q' )
oder
while( test[0] != ("Q")[0] )
Gruß Markus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Martin Gieseking Guest
|
Posted: Mon Jun 07, 2004 9:24 pm Post subject: Re: while vergleich??? |
|
|
"M.Schneider" <User969 (AT) gmx (DOT) de> wrote in news:ca2gvt$trg$00$1 (AT) news (DOT) t-
online.com:
| Quote: | warum fehlermeldung?Die while Schleife soll das erste Zeichen im
Zeichenarray test mit Q vergleichen.Wo liegt mein Fehler?
char test[100]="Tach";
.
.
while( test[0] != "Q")
|
Statt "Q" sollte da 'Q' stehen. "Q" bezeichnet eine Stringkonstante, also
einen Zeiger auf const char-Array mit den Werten 'Q' und ' '. Das hast Du
sicher nicht gemeint. char-Konstanten werden im Gegensatz dazu durch
einfache Anführungszeichen kenntlich gemacht.
Martin
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Abb351 Guest
|
Posted: Mon Jun 07, 2004 9:26 pm Post subject: Re: while vergleich??? |
|
|
1. es wäre schön, wenn du die fehlermeldung auch sagen könntest
2. es sind 2 fehler in deinem code:
a) zuweisung
| Quote: | char test[100]="Tach";
richtig wäre |
char test[100];
strcpy(test, "Tach");
b) vergleich
du vergleichst hier eine zeichenkette mit einem character.
richtig wäre:
while (test[0] != 'Q')
such mal unter "nullterminierende strings/zeichenketten"
thomas
| Quote: | warum fehlermeldung?Die while Schleife soll das erste Zeichen im
Zeichenarray test mit Q vergleichen.Wo liegt mein Fehler?
char test[100]="Tach";
.
.
while( test[0] != "Q")
{
scanf("%s",test);
.
.
irgendwas
}
|
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Mon Jun 07, 2004 10:33 pm Post subject: Re: while vergleich??? |
|
|
M.Schneider wrote:
| Quote: | warum fehlermeldung?
|
Was sagt sie denn, die Fehlermeldung?
| Quote: | Die while Schleife soll das erste Zeichen im Zeichenarray test mit Q
vergleichen.Wo liegt mein Fehler?
|
Darin, daß "Q" kein Zeichen ist (also nicht vom Typ char), sondern ein
Array. Es ist vom Typ const char[2], während test[0] vom typ char ist.
Verwende 'Q' statt "Q".
| Quote: | char test[100]="Tach";
.
.
while( test[0] != "Q")
{
scanf("%s",test);
.
.
irgendwas
}
|
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Kurt Watzka Guest
|
Posted: Tue Jun 08, 2004 3:14 am Post subject: Re: while vergleich??? |
|
|
Thomas Abbé schrieb:
| Quote: | a) zuweisung
char test[100]="Tach";
richtig wäre
char test[100];
strcpy(test, "Tach");
|
In welchem Sinne ist das "richtiger" als
char test[100] = "Tach";
Warum soll die Initialisierung der restlichen 95 Elemente von test
mit ' ' verhindert werden?
Kurt Watzka
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marco Budde Guest
|
Posted: Tue Jun 08, 2004 2:10 pm Post subject: Re: while vergleich??? |
|
|
M.Schneider wrote:
| Quote: | warum fehlermeldung?
|
Warum kein Realname?
| Quote: | Die while Schleife soll das erste Zeichen im
Zeichenarray test mit Q vergleichen.Wo liegt mein Fehler?
char test[100]="Tach";
|
Wir sind hier in C++, das würde man eher in C so machen.
Nimm besser "string" statt "char"
| Quote: | while( test[0] != "Q")
|
"Q" ist eine Zeichenkette, Du willst aber einen Buchstaben,
also 'Q'.
Benutze "cin", außerdem dürfte "&test" richtiger sein.
cu, Marco
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
M.Schneider Guest
|
Posted: Tue Jun 08, 2004 2:53 pm Post subject: Re: while vergleich??? |
|
|
Vielen dank, habe es kapiert.So trivial der Fehler, aber jetzt weiß ich
"test" ist ein Zeiger auf einen String bzw. ein Char array + /0.
und
't' ist ein Konstantes Zeichen.
Vielen Dank...
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Steffen Rauh Guest
|
Posted: Tue Jun 08, 2004 4:56 pm Post subject: Re: while vergleich??? |
|
|
| Quote: | char test[100]="Tach";
scanf("%s",test);
Benutze "cin", außerdem dürfte "&test" richtiger sein.
|
Soweit ich weiß nimmt scanf als zweiten Parameter eine Adresse (also
Pointer). Da "test" bereits ein Pointer auf das erste Feldelement ist,
scheint mir die Schreibweise von M. soweit korrekt. Ansonsten hättest die
Adresse der Adresse des Feldes. "&test[0]" wäre natürlich äquivalent zur
Schreibweise von M., falls du das gemeint hast - wäre in dem Fall aber nicht
"richtiger" sondern genauso "richtig".
MfG,
Steffen Rauh
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Heinz Buchegger Guest
|
Posted: Tue Jun 08, 2004 5:01 pm Post subject: Re: while vergleich??? |
|
|
Marco Budde wrote:
| Quote: |
scanf("%s",test);
Benutze "cin", außerdem dürfte "&test" richtiger sein.
|
Zum ersten Teil: ja
Zum zweiten Teil: nein. test war schon in Ordnung.
--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Heinz Buchegger Guest
|
Posted: Tue Jun 08, 2004 5:12 pm Post subject: Re: while vergleich??? |
|
|
Steffen Rauh wrote:
| Quote: |
char test[100]="Tach";
scanf("%s",test);
Benutze "cin", außerdem dürfte "&test" richtiger sein.
Soweit ich weiß nimmt scanf als zweiten Parameter eine Adresse (also
Pointer). Da "test" bereits ein Pointer auf das erste Feldelement ist,
|
Ich weiss was Du meinst, aber trotzdem: Vorsicht wie Du es beschreibst.
'test' ist kein Pointer. 'test' ist ein Array. Bei der Parameteuebergabe
degeneriert das Array zu einem Pointer zum ersten Element. Aber 'test'
selbst ist kein Pointer.
Wollt es nur fuer die Newbies klarstellen.
--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Steffen Rauh Guest
|
Posted: Tue Jun 08, 2004 5:32 pm Post subject: Re: while vergleich??? |
|
|
| Quote: | char test[100]="Tach";
scanf("%s",test);
Benutze "cin", außerdem dürfte "&test" richtiger sein.
Soweit ich weiß nimmt scanf als zweiten Parameter eine Adresse (also
Pointer). Da "test" bereits ein Pointer auf das erste Feldelement ist,
Ich weiss was Du meinst, aber trotzdem: Vorsicht wie Du es beschreibst.
'test' ist kein Pointer. 'test' ist ein Array. Bei der Parameteuebergabe
degeneriert das Array zu einem Pointer zum ersten Element. Aber 'test'
selbst ist kein Pointer.
|
Vom expliziten Typ her stimmt das natürlich. Implizit erfolgt aber ohne
weiteres Zutun die Konvertierung in einen Pointer - auch wenn es sich nicht
um Parameterübergaben handelt. Selbst Stroustrup sagt in 5.3 (hab grad
leider nur die deutsche Übersetzung parat):
In C++ sind Zeiger und Felder eng verwandt. Der Name eines Feldes kann als
Zeiger auf sein erstes Element benutzt werden.
In welcher Situation würde es zu Problemen führen, wenn man "vergisst" dass
test ein Array ist? Ausser beim Speichermanagement sehe ich da gerade keine
Schwierigkeiten (die sieht man aber meistens eh erst, wenn man in die Falle
reingelaufen ist .
MfG,
Steffen Rauh
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Dirk Clemens Guest
|
Posted: Tue Jun 08, 2004 8:48 pm Post subject: Re: while vergleich??? |
|
|
Steffen Rauh wrote:
| Quote: | Vom expliziten Typ her stimmt das natürlich. Implizit erfolgt aber ohne
weiteres Zutun die Konvertierung in einen Pointer - auch wenn es sich nicht
um Parameterübergaben handelt. Selbst Stroustrup sagt in 5.3 (hab grad
leider nur die deutsche Übersetzung parat):
In C++ sind Zeiger und Felder eng verwandt. Der Name eines Feldes kann als
Zeiger auf sein erstes Element benutzt werden.
In welcher Situation würde es zu Problemen führen, wenn man "vergisst" dass
test ein Array ist? Ausser beim Speichermanagement sehe ich da gerade keine
Schwierigkeiten (die sieht man aber meistens eh erst, wenn man in die Falle
reingelaufen ist .
MfG,
Steffen Rauh
|
Unterschiede und/oder Fehlermeldungen ergeben
sich bei den Operatoren sizeof ++ -- = += usw.
(Bei den Zuweisungen, wenn Zeiger/Array links vom
Zuweisungs-Operator stehen)
Lemmi
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Tue Jun 08, 2004 9:42 pm Post subject: Re: while vergleich??? |
|
|
Steffen Rauh wrote:
| Quote: | char test[100]="Tach";
scanf("%s",test);
Benutze "cin", außerdem dürfte "&test" richtiger sein.
Soweit ich weiß nimmt scanf als zweiten Parameter eine Adresse
(also Pointer). Da "test" bereits ein Pointer auf das erste
Feldelement ist,
Ich weiss was Du meinst, aber trotzdem: Vorsicht wie Du es
beschreibst. 'test' ist kein Pointer. 'test' ist ein Array. Bei der
Parameteuebergabe degeneriert das Array zu einem Pointer zum ersten
Element. Aber 'test' selbst ist kein Pointer.
Vom expliziten Typ her stimmt das natürlich. Implizit erfolgt aber
ohne weiteres Zutun die Konvertierung in einen Pointer - auch wenn es
sich nicht um Parameterübergaben handelt. Selbst Stroustrup sagt in
5.3 (hab grad leider nur die deutsche Übersetzung parat):
In C++ sind Zeiger und Felder eng verwandt. Der Name eines Feldes kann
als Zeiger auf sein erstes Element benutzt werden.
In welcher Situation würde es zu Problemen führen, wenn man "vergisst"
dass test ein Array ist?
|
void mult_matrix(int** a, int** b);
....
int matrix1[3][3];
int matrix2[3][3];
....
mult_matrix(matrix1, matrix2);
char x[] = "Hallo, Weltn";
char* y = wasweisich;
x = y;
Wer den Unterschied zwischen Array und Zeiger nicht kennt, erwartet, daß
solche Sachen funktionieren.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Heinz Saathoff Guest
|
Posted: Wed Jun 09, 2004 6:48 am Post subject: Re: while vergleich??? |
|
|
Moin,
Steffen Rauh schrieb...
| Quote: | In welcher Situation würde es zu Problemen führen, wenn man "vergisst" dass
test ein Array ist? Ausser beim Speichermanagement sehe ich da gerade keine
Schwierigkeiten (die sieht man aber meistens eh erst, wenn man in die Falle
reingelaufen ist .
|
z.B auch hier:
----- file1.cpp -----
char Test[100] = "Irgendwas";
----- main.cpp ------
#include <iostream>
extern char *Test;
int main() {
std::cout<
}
---------------------
Mit viel Glück merkt der Linker das noch. Wenn nicht, dann crasht das
höchstwahrscheinlich gewaltig.
- Heinz
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|