Warum verlangt er ein ; ?

04/18/2012 23:22 Defkahn52#1
Hi Leute, Ich lese grad ein Ebook von C++ und da ist dieser Code drin.
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b)
cout << "#";
cout << endl;
}
}
So aber C++ sagt da ist ein Fehler, er erwartet ein semikolon nach dem Parameter, aber wieso ? Es ist doch alles so richtig. Und wenn ich dort ein Semikolon hinsetzte, dann gelten die Variabeln nicht mehr, da sie ja lokal sind.

Was mach ich jetzt ?

Edit: Sry falscher Code
04/18/2012 23:35 Nightblizard#2
Ich kann mir nicht vorstellen, dass der Code so in deinem Buch steht, da er absolut unleserlich ist! Und falls doch, besorg' dir ein neues!

Zum Thema:
Da wird es sich wohl um einen Folgefehler handeln. Wie schaut die gesamte Datei aus?
04/18/2012 23:41 Defkahn52#3
Der Code ist jetzt nur so unleserlich, weil ich es aus der PDF rauskopiert habe. Die Leerzeichen und so wurden also nicht mit kopiert.

Naja der Code ist einfach in main() drin. Ich wollte nur kurz gucken was dabei rauskommt und dann kommt ein Fehler.
04/18/2012 23:41 potato.#4
vielleicht merkst dus ja noch selber, falls nicht:
Der Compiler kann den Fehler nicht richtig definieren und zeigt dir ein fehlendes ; dafür an.
Dein Problem ist aber die zweite for Schleife. Dort muss ein Semikolon hin!
Außer, du willst den unten stehenden Teil darin ausführen dann fehlen dir
die geschweiften Klammern.
Also entweder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b)[COLOR="Red"];[/COLOR]
cout << "#";
cout << endl;
}
}
oder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b) [COLOR="Red"]{[/COLOR]
cout << "#";
cout << endl;
 [COLOR="Red"]}[/COLOR]
}
}
04/18/2012 23:52 Defkahn52#5
immernoch der selbe Fehler bei der 2ten Variante

Edit: Sogar bei beiden
04/19/2012 00:03 Digital Shadow#6
Quote:
Originally Posted by Defkahn52 View Post
immernoch der selbe Fehler bei der 2ten Variante

Edit: Sogar bei beiden
Hast du eventuell vergessen bei:
Code:
using namespace std;
Das Semikolon zu setzen? Steht in der Fehlermeldung denn auch die Zeilennummer vom Funktionskopf? Oder hast du eventuell vergessen das Semikolon beim Funktionsaufruf zu setzen? Ansonsten poste doch bitte mal den gesamten Code inkl. Fehlermeldung.

Beide Varianten sind gültig und haben bei mir auf anhieb ein Rechteck erzeugt:

Code:
void rechteck(int x, int y) {
    for(int a=1; a<=y; ++a) {
        for(int b=1; b<=x; ++b) {
            cout << "#";
	}
            cout << endl;
		
    }
}
oder

(deine erste, ebenfalls gültige Variante)
Code:
void rechteck(int x, int y) {
    for(int a=1; a<=y; ++a) {
        for(int b=1; b<=x; ++b)
            cout << "#";
            cout << endl;
		
    }
}
getestet in Visual C++ 2010 Express
04/19/2012 02:27 Dr. Coxxy#7
lol @ this

Quote:
Naja der Code ist einfach in main() drin. Ich wollte nur kurz gucken was dabei rauskommt und dann kommt ein Fehler.
das ist eine FUNKTION (!), der code darf NICHT in main.
er muss darüber oder darunter, wenn du ihn druntersetzt musst du aber ne vorwärtsdeklaration machen:

Code:
#include <windows.h>
#include <iostream>
using namespace std;

void rechteck(int x, int y)
{
  for(int a=1; a<=y; ++a)
  {
    for(int b=1; b<=x; ++b)
      cout << "#";
    cout << endl;
  }
}

int main(void)
{
  printf("Rechteck incoming:\n\n");
  rechteck(10, 10);
  system("PAUSE");
}
und gewöhn dir den einrückungsstil an, den ich hier benutze, also geschweifte klammern immer in eine zeile.
ist übersichtlicher und wohl auch verbreiteter in c++.

und system("PAUSE") ist "böse", aber jetzt bei dem mini teil kein problem...

Quote:
Originally Posted by »Xanton™ View Post
vielleicht merkst dus ja noch selber, falls nicht:
Der Compiler kann den Fehler nicht richtig definieren und zeigt dir ein fehlendes ; dafür an.
Dein Problem ist aber die zweite for Schleife. Dort muss ein Semikolon hin!
Außer, du willst den unten stehenden Teil darin ausführen dann fehlen dir
die geschweiften Klammern.
Also entweder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b)[COLOR="Red"];[/COLOR]
cout << "#";
cout << endl;
}
}
oder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b) [COLOR="Red"]{[/COLOR]
cout << "#";
cout << endl;
 [COLOR="Red"]}[/COLOR]
}
}
erst nachdenken, was die funktion eigentlich tun soll, dann posten, oder die sprache lernen, wasauchimmer...
04/19/2012 10:50 MoepMeep#8
Quote:
Originally Posted by Dr. Coxxy View Post
und system("PAUSE") ist "böse", aber jetzt bei dem mini teil kein problem...
Wenn du es weißt, wieso benutzt du es dann?
04/19/2012 16:53 Defkahn52#9
OK Coxxys Variante hat jetzt funktioniert, ich lass es jetzt einfach mal mit der anderen Variante obwohls ja eigentlich auch gehen soll.

Naja vielen Dank für eure Hilfe

OK Coxxys Variante hat jetzt funktioniert, ich lass es jetzt einfach mal mit der anderen Variante obwohls ja eigentlich auch gehen soll.

Naja vielen Dank für eure Hilfe
04/19/2012 17:17 Dr. Coxxy#10
Quote:
Originally Posted by MoepMeep View Post
Wenn du es weißt, wieso benutzt du es dann?
weil es bei dem mist eh keinen unterschied macht.
04/19/2012 17:55 Nightblizard#11
Quote:
Originally Posted by Defkahn52 View Post
OK Coxxys Variante hat jetzt funktioniert, ich lass es jetzt einfach mal mit der anderen Variante obwohls ja eigentlich auch gehen soll.
Nein, du kannst keine Funktion in einer Funktion erstellen (von lambdas mal abgesehen)!
Funktionen kannst du nur in einem namespace oder in einer Klasse, bzw. Struktur erstellen.
Bei Lambdas ist das etwas anders, aber so weit bist du noch lange nicht. ;)

Ein paar Tipps noch für dich:
-Zählvariablen nennt man in der Regel i, j, l und n.
-Auch wenn du "nur mal schnell was gucken" willst, Formatierung ist Pflicht!
-Vermeide das globale usen von namespaces. Das kann zu Namenskonflikten führen, wenn du unachtsam bist.

Quote:
Originally Posted by »Xanton™ View Post
vielleicht merkst dus ja noch selber, falls nicht:
Der Compiler kann den Fehler nicht richtig definieren und zeigt dir ein fehlendes ; dafür an.
Dein Problem ist aber die zweite for Schleife. Dort muss ein Semikolon hin!
Außer, du willst den unten stehenden Teil darin ausführen dann fehlen dir
die geschweiften Klammern.
Also entweder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b)[COLOR="Red"];[/COLOR]
cout << "#";
cout << endl;
}
}
oder
Code:
void rechteck(int x, int y) {
for(int a=1; a<=y; ++a) {
for(int b=1; b<=x; ++b) [COLOR="Red"]{[/COLOR]
cout << "#";
cout << endl;
 [COLOR="Red"]}[/COLOR]
}
}
Du hast nicht wirklich verstanden was der Code machen soll. Lass es mich kurz formatieren, vielleicht verstehst du es dann.
[Only registered and activated users can see links. Click Here To Register...]

Dein Code gibt y Rauten in jeweils einer neuen Zeile aus und kein Rechteck!
04/19/2012 19:15 MoepMeep#12
######
######
######
######

Sieht aus wie ein Rechteck, nicht? :<

Übrigens sind es x # in y reihen ;o
04/19/2012 22:06 Nightblizard#13
Hmm, meine Antwort bezog sich auf seinen ersten Vorschlag. Nr. 2 habe ich mir gar nicht mehr angesehen und beim Antworten vergessen zu erwähnen.

Und nein, weder Code Nr. 1, welcher eine Raute in y Reihen ausgibt, noch Nr. 2, welcher eine Raute in x*y Zeilen ausgibt, erzielen das gewünschte Ergebnis.

Oder worauf bezog sich deine Antwort?
04/19/2012 23:37 MrSm!th#14
Sagt mal, ist mein C++ eingerostet oder wieso sagt keiner was gegen
Code:
for(int b=1; b<=x; ++b);
:<
Was soll denn das Semikolon nach einem Schleifenkopf bewirken?
04/20/2012 13:58 Nightblizard#15
Quote:
Originally Posted by MrSm!th View Post
Sagt mal, ist mein C++ eingerostet oder wieso sagt keiner was gegen
Code:
for(int b=1; b<=x; ++b);
:<
Was soll denn das Semikolon nach einem Schleifenkopf bewirken?
Das bewirkt, dass die Variable b x mal um 1 erhöht wird. Das müsste der Optimierer aber entfernen. :>

Siehe meine beiden bisherigen Antworten, denn wie ich zuvor bereits sagte, ergibt das in diesem Fall keinen Sinn. ;)