"We are back" « oc.at

do-while schleife in C

Qualle 25.07.2007 - 21:38 1033 11
Posts

Qualle

Banned
Registered: Jul 2007
Location: Austria
Posts: 46
so steht das in meinem buch.


idx=0;/*7 C:\Dev-Cpp\do while.cpp `idx' undeclared (first use this function) (erst wenn ich hier ein short davor setzte, wird der fehler nicht mehr angezeigt)*/
do
{
printf("a[%d]='%c'\n",idx,a[idx]);
}
while(a[idx++]);




ich habe den code so abgeändert:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char a;
short idx=0;
do
{
printf("a[%d]='%c'\n",idx,a[idx]); /*10 C:\Dev-Cpp\do while.cpp invalid types `char[short int]' for array subscript */
}
while(a[idx++]);
}

hab den abschnitt im buch jetzt fünf mal gelesen und komme einfach nicht dahinter was das problem an der sache ist.
Bearbeitet von Qualle am 26.07.2007, 19:38

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
was willst du tun?
das was du tust is gerade auf den index idx des vermeindlichen char arrays a zuzugreifen. Geht aber net weil a kein array ist.
btw, du machst da irgendwie ne endlosschleife

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Das sagt dir eh der Compiler: Du kannst ein char nicht als Array mit eckigen Klammern ansprechen.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
beispiel 1: eh klar, jede variable muss vor der verwendung deklariert werden (zB: short idx;)

beispiel 2: a ist falsch deklariert.

muss zB char a[10] sein.

Qualle

Banned
Registered: Jul 2007
Location: Austria
Posts: 46
schau gleich mal ob´s funktioniert thx!

ja geht thx!!!!!

Qualle

Banned
Registered: Jul 2007
Location: Austria
Posts: 46
char a[10] durchläuf 01234 also 5* die schleife wieso nicht 11*?

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Weil du nichts ins Array geschrieben hast und zufällig an der 5. Position eine 0 steht?

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19788
Haha, nice :D
Aber wirklich schön ist es ja wenn du in der Schule so etwas machst, es zufällig funktioniert und wenn der Lehrer dann kontrolliert und das Programm plötzlich faxxen macht :p

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
nunja, ein hoch auf die initialisierung.

Nochmals mein rat: Was man versteht kann man besser verwenden

Qualle

Banned
Registered: Jul 2007
Location: Austria
Posts: 46
jetzt hab i des verstanden.

while (a[idx++]); a steht für a!=0 und des hab ich übersehen.
hab die ganze zeit nach einem abbruch befehl ausschau gehalten.

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von Qualle
while (a[idx++]); a steht für a!=0

nicht ganz. Genauer ist es: while ((a[idx++]) != 0);

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Und wenn wir gleich dabei sind, ein string (char array) wird üblicherweise miteinem '\0' terminiert und du solltest
1. das wirklich als terminierung verwenden und
2. auf while(a[idx++]!='\0'); testen
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz