Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Programm stürzt nach if abfage ab

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
07.01.2007, 14:17 Uhr
marv93



Hallo an alle,
programmiere gerade ein paar c++ progrämmchen und bin gerade dabei ein prog zum berechnen des BMI's(BodyMaßIndex).
Ich habe leztens ein programm geschrieben welches nach einem if menü abgestürzt ist, genaugenommen, direkt nach der eingabe einer variablen, worauf daann die if abfrage kam.
Genau das ist auch jetzt leider wieder der fall .
Code:

Code:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    long groesse;
    long wahl;
    long alter;
    long bmi;
    long bmia;
    
Anfang:
    printf("Willkommen im BMI rechner\n");
    printf("1. Berechnen\n");
    printf("2. Tabelle\n");
    printf("Wahl: ");
    scanf("%s \n", wahl);
    if(wahl == 1) {
    system("cls");
    printf("Groeße: ");
    scanf("%s \n", groesse);
    printf("Alter: ");
    scanf("%s \n", alter);
    printf("\n Ihr BMI wird berechnet...\n");
    
    bmia = alter * alter;

    bmi = groesse / bmia;
    printf("Ihr BMI wert betraegt:",bmi);
    printf("\n Um zu sehen ob das Uebergewichtig,untergewichtig oder normal ist, verwenden sie bitte die Tabelle!\n");
    system("PAUSE");
    goto Anfang;
}
    if(wahl == 2) {
    system("cls");
    printf("Maedchen:\n");
    printf("Alter Unter-    Normal-    Ueber-    gewichtig\n");
    printf("11   14,9-15,9 16,0-21,5  21,6-24,4\n");
    printf("12   15,4-16,5 16,6-22,4  22,5-25,4\n");
    printf("13   16,1-17,2 17,3-23,2  23,3-26,2\n");
    printf("14   16,7-17,7 17,8-24,0  24,1-26,9\n");
    printf("15   17,3-18,4 18,5-24,5  24,6-27,4\n");
    printf("16   17,5-18,9 29,0-24,8  24,9-27,6\n");
    printf("17   18,9-19,2 19,3-25,0  25,1-27,6\n");
    printf("18   18,4-19,5 19,6-25,2  25,3-27,7\n");
    printf("Jungen\n");
    printf("Alter Unter-    Normal-    Ueber-    gewichtig\n");
    printf("11   15,0-15,9 16,0-21,3  21,4-24,4\n");
    printf("12   15,4-16,4 16,5-22,2  22,3-25,3\n");
    printf("13   15,9-17,0 17,1-22,9  23,0-26,2\n");
    printf("14   16,5-17,6 17,7-23,6  23,7-26,9\n");
    printf("15   17,0-18,2 18,3-24,3  24,4-27,4\n");
    printf("16   17,6-18,7 18,8-24,8  24,9-27,9\n");
    printf("17   18,1-19,3 19,4-25,3  25,4-28,3\n");
    printf("18   18,6-19,9 20,2-25,8  25,9-28,7\n");
    system("PAUSE");
    goto Anfang;
}
    return EXIT_SUCCESS;
}



Könnt ihr mir sagen was daran falsch ist?
Bin hier am verzweifeln, achso noch eine info zum absturz:
AppName: bmi-rechner.exe AppVer: 0.0.0.0 ModName: msvcrt.dll
ModVer: 7.0.2600.2180 Offset: 00034609
so, das war's jezt soweit von meiner seite hoffe auf schnelle antowrt,
danke schonmal im vorraus
MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.01.2007, 15:33 Uhr
Suba Esel



Das Problem taucht bei mir auch auf, vermutlich weil du ein C++ - Programm mit C - Befehlen geschrieben hast (siehe 1.: )

Aber mal ein paar andere Sachen:
1.: Wenn du C++ schreibst, wieso nimmst du dann nicht auch C++ - Befehle? Also std::cout und std::cin?

2.: Seit wann berechnet man den BMI als Größe / Alter * Alter? Ich dachte immer, das wäre Masse / Größe * Größe
--
Simon

Dieser Post wurde am 07.01.2007 um 15:34 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.01.2007, 15:41 Uhr
~marv93
Gast


Hi,
hab mir c++ programmieren so einigermaßen selber beigebracht und mit einigen totorials,
und in einigen kamen diese befehle auch drin vor, und meine anderen programme funktionierten auch mit diesesn befehlen.
2.: Hab extra nochmal Dr. Sommer aus der Bravo gelesen da steht das drin!
Gewicht/(Größe*Größe)=BMI

Aber zum script, angenommen ich würde das printf und scanf in cout und cin>>Var ändern würde es dann funktionieren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.01.2007, 15:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,


C++:
scanf("%s \n", alter);



du willst einen string einlesen, gibst ihm aber einen long, und davon nichtmal die adresse sondern den wert -> crash (bei den anderen 3 stellen ebenfalls)

entweder:
in string einlesen und dann in long umwandeln:


C++:
char buffer[512];
scanf("%s\n", buffer);
alter = atol(buffer);



oder richtig:


C++:
scanf("%ld\n", &alter);



oder wenn man schon C++ benutzt:


C++:
cout << "Alter: ";
cin >> alter;



also alle printfs durch couts, alle scanfs durch cins ersetzen.

Ansonsten:

system("pause") ist schlecht (vgl faq-artikel dazu) ein einfaches "cin.get()" reicht normalerweise aus.

achja und nochwas: gotos sind ebenfalls mist, ersetz die durch schleifen oder benutze unterfunktionen
--
class God : public ChuckNorris { };

Dieser Post wurde am 07.01.2007 um 15:51 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.01.2007, 15:57 Uhr
Suba Esel



Habs jetzt in halbwegs sauberes C++ umgeschrieben


C++:
#include <iostream>
#include <conio.h>

using namespace std;

void Berechnen();
void Tabelle();

int main()
{

    int wahl;

    while(1)
    {
        cout << "Willkommen im BMI - Rechner\n";
        cout << "1 = Berechnen\n2 = Tabelle\n3 = Ende\n";
        wahl = getch();
        system("cls");
        switch(wahl)
        {
            case '1':
            Berechnen();
            break;
            case '2':
            Tabelle();
            break;
            case '3':
            exit(0);
            default:
            system("cls");
        }
        system("cls");
    }
}

void Berechnen()
{
    int gewicht;
    float groesse;
    cout << "Gewicht in kg: ";
    cin >> gewicht;
    cout << "Gr\224\341e in cm: ";
    cin >> groesse;
    system("cls");
    cout << "Ihr BMI ist " << gewicht / (groesse/100 * groesse/100);
    cin.sync();
    cin.get();
}

void Tabelle()
{
    cout << "Maedchen:\nAlter Unter -     Normal -     Ueber -     gewichtig\n11   14,9 - 15,9 16,0 - 21,5  21,6 - 24,4\n"
    << "12   15,4 - 16,5 16,6 - 22,4  22,5 - 25,4\n13   16,1 - 17,2 17,3 - 23,2  23,3 - 26,2\n14   16,7 - 17,7 17,8 - 24,0  24,1 - 26,9\n"
    << "15   17,3 - 18,4 18,5 - 24,5  24,6 - 27,4\n16   17,5 - 18,9 29,0 - 24,8  24,9 - 27,6\n17   18,9 - 19,2 19,3 - 25,0  25,1 - 27,6\n"
    << "18   18,4 - 19,5 19,6 - 25,2  25,3 - 27,7\n\nJungen\nAlter Unter -     Normal -     Ueber -     gewichtig\n"
    << "11   15,0 - 15,9 16,0 - 21,3  21,4 - 24,4\n12   15,4 - 16,4 16,5 - 22,2  22,3 - 25,3\n13   15,9 - 17,0 17,1 - 22,9  23,0 - 26,2\n"
    << "14   16,5 - 17,6 17,7 - 23,6  23,7 - 26,9\n15   17,0 - 18,2 18,3 - 24,3  24,4 - 27,4\n16   17,6 - 18,7 18,8 - 24,8  24,9 - 27,9\n"
    << "17   18,1 - 19,3 19,4 - 25,3  25,4 - 28,3\n18   18,6 - 19,9 20,2 - 25,8  25,9 - 28,7\n";
    cin.sync();
    cin.get();
}


--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.01.2007, 16:01 Uhr
Suba Esel



Ups, hab grade die Antwort von FloSoft gesehen. Hab dir die Arbeit schon abgenommen....^^


Zitat von Marv93:
2.: Hab extra nochmal Dr. Sommer aus der Bravo gelesen da steht das drin!
Gewicht/(Größe*Größe)=BMI


Schön und gut, aber:

Zitat von Marv93:


C++:
bmia = alter * alter;
bmi = groesse / bmia;





Da sag ich jetzt nichts zu....
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.01.2007, 16:43 Uhr
~marv93
Gast


Danke für die schnelle antwort,
habe nicht gewusst das man in nem script auch mit klammern rechnen kann, deswegen hab cih's so umständlich gemacht (also das rechnen) danke für die antworten, hab darauf gelernt!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.01.2007, 17:53 Uhr
Suba Esel



Bidde
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.01.2007, 18:12 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


getch() ist deprecated, conio.h ist nicht standard und wird eigentlich gar nicht benötigt, system ist unschön, wenn man das auch mit C/C++ Funktionen machen kann und der Aufbau der Funktionen ist schäußlich - ansonsten aber schöner wie der Code oben.
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.01.2007, 18:28 Uhr
Suba Esel




Zitat von J-Jayz-Z:
getch() ist deprecated, conio.h ist nicht standard und wird eigentlich gar nicht benötigt, system ist unschön, wenn man das auch mit C/C++ Funktionen machen kann und der Aufbau der Funktionen ist schäußlich


1.: Gibt es eine andere Möglichkeit, die aber das gleiche macht wie getch()? Wenn ja, schmeiß ich conio.h sofort raus, für die Pausen hab ich cin.get(); genommen
2.: Wie kann man mit einer C++ - Funktion den Bildschirm lehren?
3.: Ich hab gleich gesagt: HALBWEGS sauber, ich hab das erstens in Hetze gemacht und wollte zweitens nicht nen komplett neuen Code schreiben, sondern nur das Beispiel in Funktionen und C++ umschreiben
--
Simon

Dieser Post wurde am 07.01.2007 um 18:29 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: