Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » programm funktioniert nicht

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
20.05.2006, 10:22 Uhr
~anna
Gast


Hallo!
Vor kurzem habe ich schon mal einen Beitrag gepostet, und wieder habe ich das gleiche Problem, nach dem ausführen des Programms kommt eine Fehlermeldung, dass ein Fehler aufgetreten ist, und das Programm beendet werden muss.
Kann Mir mal bitte jemand erklären, wo mein Fehler liegt?
Danke!



C++:
#include <iomanip>
#include <iostream>
#include <conio.h>
using namespace std;

void eingabe(void)
{
int i, wert[i], max;

for (i=0;i<=4;i++)
{
cout <<"bitte geben sie 4 Funktioneswert eine";
cin >>wert[i];        
}

for (i=0; i<=4;i++)
{
if (wert[i]>max)
{
max=wert[i];                
}
    
}
cout <<"\n"<<max;    
}

int main()
{
cout <<"Willkommen";
eingabe();    
    
getch();
return 0;  
}




Bearbeitung:
cpp Tags

Dieser Post wurde am 20.05.2006 um 10:25 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.05.2006, 10:33 Uhr
mike
Pinguinhüpfer
(Operator)


Probier mal so

C++:
#include <iomanip>
#include <iostream>
using std::cout;
using std::endl;
using std::cin;

const int amount = 4;

void eingabe(void)
{
  int i, wert[amount], max;

  for (i=0;i<amount;i++)
  {
    cout << "bitte geben sie 4 Funktioneswert eine";
    cin >> wert[i];        
  }

  max = wert[0];
  for (i=0; i<amount;i++)
  {
    if (wert[i] > max)
      max=wert[i];                
  }

  cout << endl << max;    
}

int main()
{
  cout <<"Willkommen";
  eingabe();    
    
  return 0;  
}



Eingabe würde ich allerdings mit getline machen und prüfen:

C++:
#include <sstream>
//...
template<typename T>
inline void convert(const std::string& s, T& x, bool failIfLeftoverChars = true)
{
  std::istringstream i(s);
  char c;
  if(!(i >> x) || (failIfLeftoverChars && i.get(c)))
    throw BadConversion(s);
}
//...
class BadConversion : public std::runtime_error {
public:
   BadConversion(const std::string& s)
     : std::runtime_error(s)
     { }
};
//...
getline(cin, userInput);
// ...
double theNumber;
try
{
  convert(userInput, theNumber);      
}
catch(BadConversion &)
{
  // was auch immer
}



lg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.05.2006, 10:51 Uhr
~anna
Gast


vielen dank !
kannst du mir bitte noch kurz erklären wieso mein Programm nicht geht?
Ich hab davon nicht all zuviel Ahnung, würde es aber gerne verstehen, weil ich am Montag Informatik Abitur schreibe, und so wie dein Programm haben wir das nie gemacht, trotzdem verstehe ich nicht warum meins nicht funktioniert.
Herzlichen Dank
anna
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.05.2006, 11:02 Uhr
mike
Pinguinhüpfer
(Operator)



C++:
#include <iomanip>
#include <iostream>
#include <conio.h> // gibt es nicht
using namespace std; // sollte man nicht tun - lieber std::cout, etc

void eingabe(void)
{
int i, wert[i], max; //wert[i] = unbestimmte größe - ganz, ganz schlecht. zu 99% sigfault

for (i=0;i<=4;i++) // mehr als 4 Werte
{
cout <<"bitte geben sie 4 Funktioneswert eine";
cin >>wert[i];        
}

// Deine max Variable hat einen unbestimmten Wert. Wenn du Pech hast bekommst du gar kein Ergebnis. Also muss max der erste Array Eintrag sein

for (i=0; i<=4;i++) // mehr als 4 werte
{
if (wert[i]>max)
{
max=wert[i];                
}
    
}
cout <<"\n"<<max; // \n gibt es nicht    
}

int main()
{
cout <<"Willkommen";
eingabe();    
    
getch(); // schaut noch Windows aus - system("pause");
return 0;  
}


--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.05.2006, 11:09 Uhr
mike
Pinguinhüpfer
(Operator)


Aber um deine Frage noch genau zu beantworten:
Der Fehler liegt in
int i, wert[i], max;

int i hat irgendeinen Wert (=uninitialisiert). Jetzt legst du ein Array an das eine unbestimmte Größe hat (mit viel Glück 0). Nun versuchst du anschließend mit dem [ ] Operator auf ein Element zu zugreifen, welches nicht existiert = Programmabsturtz.
Darum würde ich an deiner Stelle (wie gezeigt) eine Konstante anlegen (const int ... - entspricht dem #define aus C Zeiten). Dann kannst du bequem aus 4 Zahlen - 7 machen und du solltest keine Probleme haben.


Darum verwendet man nur mehr STL Arrays alla vector. Das ist interen aus low-level Arrays aufgebaut, d.h. du verlierst sogut wie keine Geschwindigkeit. Weiters hast du Funktionen wie GetAt die da sicherer sind.
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.05.2006, 11:25 Uhr
~gast
Gast


So macht Dein Programm was es soll:

C++:
#include <iomanip>
#include <iostream>
#include <conio.h>
using namespace std;

void eingabe(void)
{
/////////////////////int i, wert[i], max;
int i, wert[4], max;
cout <<"bitte geben sie 4 Funktioneswert ein:";
for (i=0;i<4;i++) //bei 4 Werten muss es i < 4 lauten 0 1 2 3
{
//cout <<"bitte geben sie 4 Funktioneswert eine"; muss weiter vorne stehen
cin >>wert[i];        
}

for (i=0; i<4;i++)
{
if (i && wert[i]>wert[i-1])
{
max=wert[i];                
}
else
max=wert[i];// wenn i = 0 dann wert[i] nach max
}
cout <<"\n"<<max;    
}

int main()
{
cout <<"Willkommen";
eingabe();    
    
getch();
return 0;  
}



mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.05.2006, 11:34 Uhr
~gast
Gast


Hab noch nen Fehler ausgebügelt

C++:


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

void eingabe(void)
{
/////////////////////int i, wert[i], max;
int i, wert[4], max;
cout <<"bitte geben sie 4 Funktioneswert ein:";
for (i=0;i<4;i++) //bei 4 Werten muss es i < 4 lauten 0 1 2 3
{
//cout <<"bitte geben sie 4 Funktioneswert eine"; muss weiter vorne stehen
cin >>wert[i];        
}
max = 0;
for (i=0; i<4;i++)
{
if (i && wert[i]>wert[i-1])
{
   if(max < wert[i])//////////////////!
     max=wert[i];                
}
else
max=wert[i];// wenn i = 0 dann wert[i] nach max
}
cout <<"\n"<<max;    
}

int main()
{
cout <<"Willkommen";
eingabe();    
    
getch();
return 0;  
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.05.2006, 11:49 Uhr
xXx
Devil


Naja... ich geh mal davon aus das du das ganze der Größe nach sortieren wolltest... so wird das nicht gehen


C++:
void Input(void)
{
    int nValue[4];
    int nMax = 0;
    
    std::cout << "Bitte geben sie 4 Funktioneswert ein:";
    
    for(unsigned int i = 0; i < 4; ++i)
    {
        std::cout << "\n->";
        std::cin >> nValue[i];      
    }
    
    nMax = nValue[0];

    for(unsigned int i = 1; i < 4; ++i)
    {
        if(nMax < nValue[i])
            nMax = nValue[i];                
    }
    
    std::cout << "\n" << nMax << std::endl;    
}



So ist der Code mal ein wenig gecleared

Dieser Post wurde am 20.05.2006 um 11:52 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.05.2006, 12:06 Uhr
~gast
Gast


Wieso soll das nicht gehen?

C++:
max = 0;
for (i=0; i<4;i++)
{
if (i && wert[i]>wert[i-1])
{
   if(max < wert[i])//////////////////!
     max=wert[i];                
}
else
max=wert[i];// wenn i = 0 dann wert[i] nach max
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.05.2006, 12:22 Uhr
mike
Pinguinhüpfer
(Operator)


Ist doch viel zu kompliziert. Wenn du max auf den ersten Arrayinhalt setzt genügt eine if
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: