Programm zur Addition

Bismark: braucht es nicht zwangslaeufig, da die {} den Anweisungsblock des Hauptprogramms schon festlegen ... Return ist dafuer da, dem OS mitzuteilen, ob das Programm ordnungsgemaess oder mit Fehler beendet wurde.


am Ende laesst sich die Geschichte sogar mit Eingabe kurz schreiben:

Code:
#include <iostream>

using namespace std;

int main() 
{
  cout << "Geben sie 2 Ziffern getrennt von [Enter] ein: \n"
  while (1)
  {
     int a=getch();
     int b=getch();
     if (9>= (a-'0') && 0<=(a-'0') && 9>=(b-'0') && 0<=(b-'0'))
    {
      int c=a+b;
      cout<<"Das Ergebnis von "<<a<<" + "<<b<<" = "<<c<<endl;
      break;
    }
    else cout<<"Keine Ziffer eingegeben, bitte widerholen sie die Eingabe: \n";
  }
}
 
Hallo,

Eine "return "-Anweisung bewirkt die unmittelbare Beendigung der momentanen Funktion und einen Rücksprung zum aufrufenden Programmteil. Wird eine "return "-Anweisung mit einem Ausdruck angegeben, wird der Wert dieses Aufrufs als Funktionsergebnis an den aufrufenden Programmteil zurückgegeben. Sollte der Wert des Ausdrucks nicht mit dem Datentyp des Funktionswertes übereinstimmen, erfolgt eine implizite Typumwandlung.
Das Erreichen des Endes der Funktion ist gleichbedeutend mit einer "return "-Anweisung ohne Ausdruck.


Form: "return " [Ausdruck] "; "

Code:
/* Damenproblems - Backtracking
               Turbo C++ v4.5                          */

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

const char Kopfzeile[9]={'A','B','C','D','E','F','G','H'};
typedef enum wahrheit{true=1,false=2} wahr;
int Dame[8]={0};

void write_Loesungen()          //gibt die Lösung aus
{
 int i;
 for(i=0;i<8;i++)
 {
  printf("%d",Dame[i]);
 }
 printf("\n");
}

int pruefung_bedroht(int s)
{
 int i=0;
 wahr bedroht=false;              //Lokale Definition
 while((i<s)&&(bedroht==false))
 {
  if((Dame[s]==Dame[i])||(abs(Dame[s]-Dame[i])==s-i))
	bedroht=true;
  else i++;
 }
 return bedroht;                  //gibt den "bedroht" zurück mit
}                                 //entsprechendem Wert true oder false

int pruefung_auf_Brett(int s)
{
 wahr pos;                        //Lokale Definition
 if(Dame[s]>0) pos=true;
 else pos=false;
 return pos;                      //Lifert Position true oder false
}

void vorruecken(int s)
{
 do
 {
  if(Dame[s]<8)Dame[s]=Dame[s]+1;
  else Dame[s]=0;
 }while((pruefung_bedroht(s)==true) &&(pruefung_auf_Brett(s)==true));
}

void Damen_setzen()      					 //Die Dame wird gesetzt
{
 int k=0;                               //Die Dame auf Null setzen
 do
 {
  vorruecken(k);
  if (pruefung_auf_Brett(k)==true)      //Prüfung ob die Dame auf Brett ist
  {
	if(k<7) k++;                         //wenn wahr dann vorrücken
	else write_Loesungen();              //sonst die Lösung schreiben
  }
  else k--;                             //wenn die Dame nicht auf Brett ist dann
 }while(pruefung_auf_Brett(0)==true);
}

void main(void)
{
 clrscr();
 printf("Lösung des Damen-Problems");
 printf("\n=========================\n\n");
 printf("%s",Kopfzeile);
 printf("\n");
 Damen_setzen();
 printf("\nDas sind alle Lösungen!");
}

Die void Funktionen habe ich ohne return geschrieben, und int verlangt eine return Anweisung, sonst gibt der Compiler einen Fehler aus. Ich weis nicht wie das in Dev C++ aussieht, habe nicht probiert.

Sorry für den completen Code

PaaK
 
Hi.
Code:
void main(void)
{
}
Die void Funktionen habe ich ohne return geschrieben, und int verlangt eine return Anweisung, sonst gibt der Compiler einen Fehler aus. Ich weis nicht wie das in Dev C++ aussieht, habe nicht probiert.
Laut C und C++ Standard muss die Haupteinsprungsroutine (main) int zurückgeben. D.h. "void main()" ist falsch bzw. nicht standardkonform. (Turbo C++ 4.5 ist natürlich etwas älter und unterstützt deswegen nicht unbedingt den C++ Standard. Dev-C++ ist kein Compiler - hat also mit der ganzen Sache nichts zu tun. Dev-C++ verwendet den GCC als Compiler und der ist weitgehend standardkonform zum C und C++ Standard. Du solltest evtl. zu einem aktuellen Compiler wechseln.)

Laut C 99 und C++ Standard darf man in der Haupteinsprungsroutine (main) die "return 0;" Anweisung weglassen (der Compiler geniert diese dann automatisch). (In anderen Funktionen gilt das nicht!)

Gruß
 

Neue Beiträge

Zurück