Problem mit Programm
-
Hallo,
Also ich schreibe mit Code::Blocks und Mingw 3.4.5.
Zu meinem Problem :
Das Programm arbeitet soweit, wie ich es will. Wen ich es in Debug kompiliere und die Datei mit Programmname.exe oder nur Programmname in Console starte arbeite es. Wen ich es als Release kompiliere, startet die Datei nur mit Programmname und bei Programmname.exe kommt eine fehlermeldung.#include <iostream> using namespace std; int eingabe(int zahlen) { int zahleingabe; cout << "Eingabe: Zahl " << zahlen + 1 <<" = "; cin >> zahleingabe; return(zahleingabe); } int main(int argc, char* argv[]) { //Variabeln int zahlen; int reihe[zahlen]; int zahl[zahlen]; cout << "---Eingabe start---\n\n"; if (argc < 2) { cout << "Wieviel Zahlen wollen sie vergleichen?\n"; cin >> zahlen; if (zahlen == 1) { cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); } for (int i = 0; i < zahlen; i++) { zahl[i] = eingabe(i); } } else if (argc > 2) { zahlen = argc - 1; cout << "Es wurden " << zahlen << " Objekte gefunden zum vergleichen!\n"; for (int i = 1; i < argc; i++) { zahl[i-1] = atoi(argv[i]); } } else if (argc = 1) { cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); } cout << "\n---Eingabe ende, start Vergleichen---\n\n"; for (int i = 0; i < zahlen; i++) { reihe[i]=0; for (int r = 0; r < zahlen; r++) { if (zahl[i] > zahl[r]) { reihe[i]++; } } cout << "."; } cout << "\n\n---Vergleichen ende, start Ausgabe---\n\n"; for (int r = 0; r < zahlen; r++) { for (int i = 0; i < zahlen; i++) { if (reihe[i] == r) { cout << "Ausgabe: Zahl["<<i<<"] \t= "<<zahl[i]<<endl; } } } cout << "\n---Ausgabe ende---\n\n"; return 0; }Habe es auch schon in MVC++Express versucht, aber da muss ich was im Code ändern. Aber da läuft es dann im Debug und Release Modus. Ausser ich gebe 1 zahl zuviel ein.
int main(int argc, char* argv[]) { //Variabeln int zahlen; int reihe[30]; int zahl[30]; ...Also wie bekomme ich die Fehlermeldung weg, wen ich bei Releasemodus mit Programmname.exe starte?
Ok ist mein erster grössere Versuch mit einem C/C++ Programm. Ich bin für jeden Tipp dankbar.Mfg Isi
-
Erstens: C++ unterstützt keine VLA's - und selbst wenn, ist die Deklaration
int zahlen; int reihe[zahlen]; int zahl[zahlen];ein Syntaxfehler. Wenn du erst zur Laufzeit weißt, wie groß ein Array werden soll, nimm lieber std::vector<>.Zweitens: bei
else if(argc=1)...sollte doch besser ein Vergleich (==) stehen als eine Zuweisung.Drittens: Zu deinem Problem - Welche Fehlermeldung kommt denn? Im Zusammenhang mit Debug vs. Release fallen mir nur SegFaults und ähnliches ein - aber warum die Release-Version je nach Aufruf anders reagieren sollte, ist mir ein Rätsel.
Viertens: Such dir mal einen ordentlichen Sortieralgorithmus
(C++ liefert selber einige mit - std::sort(), std::stable_sort(),...)
-
Ehm
int zahlen; int reihe[zahlen]; int zahl[zahlen];ist so auch nicht im Standard
Ist nen Feature vom G++ ... arbeite mit Werten aufm Heap (new int[zahlen] ... delete [] nicht vergessen!) und dann sollte das auch der MS VC++ schlucken
Ansonsten müsstest de mal debuggen ... vllt. gehst du irgendwo aus den Wertebereich eines Arrays heraus oder so ...
-
isiprimax schrieb:
//Variabeln int zahlen; int reihe[zahlen]; int zahl[zahlen];Das funktioniert so nicht wirklich. Du musst feste Grenzen fuer die Arrays angeben. Falls du das nicht kannst, wie in diesem Fall, benutz beispielsweise std::deque<int> (oder std::vector<int>). Ich vermute dass das auch der Teil ist, den MVC++ dir nicht durchgehn laesst, das ist im Standard naemlich nicht erlaubt.
cin >> zahlen; if (zahlen == 1) { //besser if (zahlen <= 1) cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); } for (int i = 0; i < zahlen; i++)Mach hier am Besten die Abfrage strenger, damit auch negative Eingaben abgefangen werden, sonst landest du ein einer ziemlich langen Schleife

else if (argc = 1) { cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); }In den Teil kommst du nie rein - du hast oben schon abgefragt if (argc<2) damit ist der fall abgedeckt. Ausserdem wolltest du vermutlich eher if (argc==1) schreiben, also einen Vergleich an Stelle einer Zuweisung. (So wies jetzt da steht wirst du bei genau 2 Argumenten diese if-abfr4age ausfuehren, und die setzt argc=1 und gibt dann 1, also true zurueck.)
Was deine Probleme mit Release/Debugmodus und dem Vorhandensein einer .exe angeht: Ich weiss leider nicht, welche Eigenheiten Mingw da an den Tag legt, aber offenbar gibts im Releasemodus am Ende nur ein Programm mit genau dem namen, den du ihm angibst. Der Debugmodus scheint (warum auch immer) zwei Programme (zweimal das gleiche?) zu erzeugen, einmal mit und einmal ohne .exe
-
Thx für die tollen Infos.Ok habs so abgeändert. Wen noch was zu verbessern gibt bitte ich um Posts.

Ps Nachtrag: Nun geht die ReleaseDatei auch.
#include <iostream> #include <vector> using namespace std; int eingabe(int zahlen) { int zahleingabe; cout << "Eingabe: Zahl " << zahlen + 1 <<" = "; cin >> zahleingabe; return(zahleingabe); } int main(int argc, char* argv[]) { //Variabeln int zahlen; vector<int> reihe; vector<int> zahl; cout << "---Eingabe start---\n\n"; if (argc < 2) { cout << "Wieviel Zahlen wollen sie vergleichen?\n"; cin >> zahlen; reihe.resize(zahlen); zahl.resize(zahlen); if (zahlen <= 1) { cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); } for (int i = 0; i < zahlen; i++) { zahl[i] = eingabe(i); } } else if (argc > 2) { zahlen = argc - 1; reihe.resize(zahlen); zahl.resize(zahlen); cout << "Es wurden " << zahlen << " Objekte gefunden zum vergleichen!\n"; for (int i = 1; i < argc; i++) { zahl[i-1] = atoi(argv[i]); } } else if (argc <= 2) { cout << "Zuwenige Zahlen angeben zum vergleichen!\n\n---Abbruch!\a"; return (0); } cout << "\n---Eingabe ende, start Vergleichen---\n\n"; for (int i = 0; i < zahlen; i++) { reihe[i]=0; for (int r = 0; r < zahlen; r++) { if (zahl[i] > zahl[r]) { reihe[i]++; } } cout << "."; } cout << "\n\n---Vergleichen ende, start Ausgabe---\n\n"; for (int r = 0; r < zahlen; r++) { for (int i = 0; i < zahlen; i++) { if (reihe[i] == r) { cout << "Ausgabe: Zahl["<<i<<"] \t= "<<zahl[i]<<endl; } } } cout << "\n---Ausgabe ende---\n\n"; return 0; }
-
Nur am Rande: War dieser seltsame Sortier-Algorithmus vorgegeben? Wenn nicht, solltest du dir einen besseren auswählen (schau mal in die Wikipedia, da sind einige beschrieben).
-
Ich brauch Ziele zum programmieren. Und ich hab da paar Anfänger-Tutorial gelesen und nach programmiert. Mein ziel war es mit dem erlernten so ein Programm zu schreiben. Alleine nach dem vector befehl mussste ich 20 Min suchen um ein Programmier Beispiel zu finden mit dem ich was anfangen konnte *gg*.
Aber Danke für die guten Hilfestellungen.