C++: Hilfe bei Quellcode?

2 Antworten

Du machst noch immer die gleichen Fehler, wie in deinen vorherigen Fragen, wo sie schon korrigiert wurden:

1) Hier steht wieder anderer Code zwischen Parameterliste und geschweifter Klammer.

int main()
int calcMark(int p) // wrong
while(0>=p<=100)    // wrong
{

Korrektur:

int main()
{

Zudem ist so ein Ausdruck:

0>=p<=100

generell nicht erlaubt. Solche Vergleiche gehören aufgesplittet, dann kann man sie logisch miteinander verknüpfen:

0 >= p && p <= 100

2) Das endl hat nach wie vor dort nichts zu suchen. Raus damit.

return 0;endl

Zu deiner Programmlogik:

(...) vielleicht kann man durch das  return wieder zurück, (...)

Nein, nicht in dem Sinne. Der return-Befehl dient dazu, aus einem Funktionskontext heraus auszubrechen, um wieder in den Kontext des Aufrufers zu gelangen.

Beispiel:

void sayHello(int);

int main()
{
  sayHello(7);
  sayHello(18);

  return 0;
}

void sayHello(int daytimeInHours)
{
  if (daytimeInHours < 10) {
    std::cout << "Good morning!";
    return;
  }

  if (daytimeInHours < 17) {
    std::cout << "Good day!";
    return;
  }

  // etc. ...
} 

Beim Aufruf mit dem Argument 7 wird der Körper der ersten if-Struktur durchlaufen, nach Ausführung von return springt der Programmfluss sofort wieder aus der Methode heraus, zurück in den Kontext von main.

Für einen Code-Abschnitt, der sich wiederholen soll, wäre eine Schleife angebracht.

int input;

do {
  std::cout << "Bitte geben Sie eine Zahl ein." << std::endl;
  std::cin >> input;
}
while (input < 0 || input > 100);

In diesem Beispiel würde diese so lange laufen, wie die Eingabe unter 0 oder über 100 liegen würde.

Zusatzanmerkung:

Bei meinem Snippets hast du des Weiteren sicherlich schon bemerkt, dass ich stets die logischen Operatoren && oder || verwende, statt & oder |. Der Vorteil bei diesen liegt darin, dass sie nur die Ausdrücke auswerten, die ausgewertet werden müssen.

Hier bspw. wird nur der erste Vergleich ausgewertet und der zweite übersprungen, da zu diesem Zeitpunkt bereits klar ist, dass der Ausdruck insgesamt nicht mehr wahr werden kann (false && true => false).

int number = 1;

if (number != 1 && number > 0) {
  // ...

In diesem Beispiel:

int number = 1;

if (number == 1 || number < 0) {
  // ...

wird ebenfalls nur der erste Ausdruck ausgewertet, denn mit einem wahren Teilergebnis ist auch der Gesamtausdruck wahr (true || false => true).

Wenn du stattdessen mit Bitoperatoren (& und |) arbeitest, werden in jedem Fall beide Ausdrücke ausgewertet. Auch, wenn es nicht notwendig wäre.

für wiederholungen brauchst du eine schleife , z.b. while

Okey, gibt es aber keine Möglichkeit durch return an den Anfang zu kommen? Eine Schleife war meine Zweite Option. Ich wollte aber auch, dass man danach einen Hinweis bekommt, dass man keine Zahl zwischen 0 und 100 eingegeben hat.

0
@iIovemusic

sorry aber geh einfach die tutorials durch , function und rückgabe werte etc etc ... return hat nix mit GOTO sprunkmarken aus dem BASIC von vor 1990 zu tun .

0
@RakonDark

Okey, danke. Ich hab das jetzt so gemacht, aber bekomm noch eine Fehlermeldung.

#include <iostream>

using namespace std;

 int main()

 int calcMark(int p)

 while(0>=p<=100)

 {

 int p;

 cout<<("Erreichte Punktzahl eingeben");

 cin >> p;

 if( p >= 0 & p <= 44)cout<<"Note 5"<<endl;

 if( p >= 45 & p <= 59)cout<<"Note 4"<<endl;

 if( p >= 60 & p <= 74)cout<<"Note 3"<<endl;

 if( p >= 75 & p <= 89)cout<<"Note 2"<<endl;

 if( p >= 90 & p <= 100)cout<<"Note 1"<<endl;

}

return 0;endl

}

0

Was möchtest Du wissen?