PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : standard code aber falsch -.- c++



Apologist
14.11.2007, 01:27
ich hab so n buch zum lernen und hab hier ne aufgabe gehabt und die nach meiner methode gemacht und da hat mir der compiler nen fehler angezeigt, den ich nich verstehe

dann hab ich mir die musterlösung im buch angeguckt und die reingetippt

schon wieder: syntax error

is das buch falsch???


btw. compiler: dev c++


source:


#include <iostream>
using namespace std;
#include <stdlib.h>

int main ()
{
int Geraten;
int SuchZahl
srand(4);
SuchZahl = rand() % 1000 + 1;
do
{
cout << "Eine Zahl twischen 1 und 1000!" << endl;
cin >> Geraten;
if (Geraten < SuchZahl)
{
cout << "zu klein!" << endl;
}
if (Geraten > SuchZahl)
{
cout << "zu groß!" << endl;
}
}
while (Geraten != SuchZahl);
cout << "Das war richtig!" << endl;
}

Steav
14.11.2007, 02:28
Musst du halt gucken wo der compiler dir den fehler anzeigt.
ohne den code weiter anzugucken fällt mir nur das auf:

while (Geraten != SuchZahl);

wieso ist da hinter dem while() ein ; ?

aber jemand der cpp codet kann dir das sicher mit 1 blick sagen, ich code nur c#

NEAVORC
14.11.2007, 08:52
Habs bei mir eingegeben und es ging nicht dann hier:

int Geraten;
int SuchZahl

Ein semikolon :

int Geraten;
int SuchZahl;

Dann ging es^^

Hoffe das war dein Prob

zao
14.11.2007, 15:33
däääääh xD


#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;


int main ()
{
int Geraten;
int SuchZahl;
srand(4);
SuchZahl = rand() % 1000 + 1;
do
{
cout << "Eine Zahl twischen 1 und 1000!" << endl;
cin >> Geraten;
if (Geraten < SuchZahl)
{
cout << "zu klein!" << endl;
}
if (Geraten > SuchZahl)
{
cout << "zu groß!" << endl;
}
}

while (Geraten != SuchZahl);
{
cout << "Das war richtig!" << endl;
getch();
}
return 0;
}


mfg

zao

Apologist
14.11.2007, 15:52
ihr hattet recht ^^

habs ausprobiert und es ging

ABER: hab noch n weiteres problem ....

ich hab das jetz geschafft zu compilen und das geht jetz auch so, aber wenn ich jetz die zahl richtig geraten hab, dann zeigt der mir nicht: Das ist richtig an, sondern schließt das fenster einfach

das is mir schon öfters passiert ... was kann ich dagegen tun?

born2die
14.11.2007, 16:41
hau noch nen getch(); rein....

l0dsb
14.11.2007, 17:20
Ja, ein getch löst das Problem. Die liegt übrigens in der conio.h, wie zao ja auch schon gepostet hat, nicht dass du vergissten, den header einzubinden. :)

c4pone
15.11.2007, 15:27
zao warum machste den das hire while (Geraten != SuchZahl);
müßte das nicht so heißen while (Geraten == SuchZahl); ?^^
den sonnst wird ja nie Das war richtig! aus gegeben oder hab ich jetz
nen totalen denkfehler ^^

zao
15.11.2007, 16:00
das is ne do-while Schleife xD

guggs dir mal nochmal an

-[RiDER]-
15.11.2007, 16:39
SuchZahl = rand() % 1000 + 1;

Möchtest du damit eine Zahl zwischen 1 und 1000 generieren???
Sinnloses Musterbeispiel... :shock:


SuchZahl = (int)((float)rand() / MAX_RAND * 1000);
Würde ich mal sagen ;)


if(Geraten < SuchZahl)
{
cout << "zu klein!" << endl;
}
if(Geraten > SuchZahl)
{
cout << "zu groß!" << endl;
}
würde ich mal ganz schnell zu nem...
if(Geraten < SuchZahl)
cout << "zu klein!" << endl;
else if(Geraten > SuchZahl)
cout << "zu groß!" << endl;...machen. Also else if bei der zweiten Bedingung und geschweifte Klammern weg ;)


{
cout << "Das war richtig!" << endl;
getch();
} Warum steht das in geschweiften Klammern???

Warum ne do-while-Schleife???
while würdes auch tun (n guter Compiler macht da garantiert auch ne while-Schleife draus...).
Ich würde ein...
while(1)
{
cout << "Eine Zahl twischen 1 und 1000!" << endl;
cin >> Geraten;
if(Geraten < SuchZahl)
cout << "zu klein!" << endl;
else if(Geraten > SuchZahl)
cout << "zu groß!" << endl;
else
break;
}...vorschlagen

Und besonders niedlich finde ich am Ende statt getch() ein system("pause");

MfG RiDER

l0dsb
15.11.2007, 17:53
Möchtest du damit eine Zahl zwischen 1 und 1000 generieren???
Sinnloses Musterbeispiel... Geschockt
Erm, das Beispiel funktioniert einwandfrei? rand gibt bei meinen Headern einen Integer zurück, wieso castest du das dann noch nach float? Der rand()-Code von zao ist logisch, warum sollte der dann nicht funktionieren? o0

If und else if ist klar, das mit den Klammern Geschmackssache und naja, die system finde ich persönlich nicht sooo prickelnd... Aber gut, jedem seien eigenen Stil. :]

Das Ganze ist eigtl. ein gutes Beispiel, wie verschiedene Leute dasselbe Problem lösen würden. :D

Ich hätte es wiederum so gemacht:

/edit: srand vergessen... oops. :)



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

int main(int argc, char **argv)
{
int guessed, searched;

printf("\n\tGuess da numba!\n\n\n\tWhat d'you guess?\n");

srand(GetTickCount());
searched = rand() % 999 + 1;

while(true)
{
printf("\n\t > ");
scanf("%i", &guessed);

if(guessed == searched)
{
printf("\t ! R u jeez? That's true!\n");
break;
}
else if(guessed > searched)
printf("\t X Uh, that's too big...\n");
else
printf("\t X Erm, a bit more, please...\n");
}

printf("\n\n\tEnter a key to quit.\n\t");

getch();
return 0;
}

-[RiDER]-
15.11.2007, 19:06
Möchtest du damit eine Zahl zwischen 1 und 1000 generieren???
Sinnloses Musterbeispiel... Geschockt
Erm, das Beispiel funktioniert einwandfrei? rand gibt bei meinen Headern einen Integer zurück, wieso castest du das dann noch nach float? Der rand()-Code von zao ist logisch, warum sollte der dann nicht funktionieren? o0Ihr habt recht O_o
War ein Denkfehler von mir ;)

system() ist
1. unschön
2. meist nicht portabel

@fogx:
nimm doch die standardfunktion time() und statt getch() getchar() und schon hasste nen völlig portables programm ;)
kannste auf nem commodore, aufm schneiderpc, aufm powerpc, aufm intel usw. zum laufen bringen ;)

MfG RiDER

l0dsb
15.11.2007, 19:21
Du weißt ja, ich bin engagierter Windwoze-Coder... :) Aber natürlich hast du Recht.

Wegen"system": Das meine ich auch - unportabel, unschön usw., dachte nur, du hättest sagen wollen, dass man ihn verwenden soll. Sollte das nächste Mal genauer lesen.

Schlurmann
15.11.2007, 23:45
Variablen sollten beim Deklarieren auch immer gleich initialisiert werden. Das gehört zum guten Stil und beugt Fehlern vor.

http://geosoft.no/development/cppstyle.html#General%20Recomendations

Schöner Styleguide, sollte man sich dran halten. :)

-[RiDER]-
16.11.2007, 00:02
Hab auch mal sowas gepostet gehabt (für C): Coding-Standard nach Klaus Schmaranz (http://www.free-hack.com/viewtopic.php?p=197906#197906)

MfG RiDER