Andre_Neujahr
Anmeldungsdatum: 21. März 2008
Beiträge: 99
Wohnort: Nordsehl
|
Hi Leute, vorab → ja suchfunktion genutzt, aber nichts richtig hilfreiches gefunden. hier mein Problem: Ich habe für mein Game-Windows einen C++ script gemacht um über die Konsole anwendugen zu starten. Nun würde ich ganz gerne mal wissen, wie ich den pfad zu den installierten Programmen in Ubuntu 7.10 beschreiben muss....? Mein script unter Windows: #include <iostream>
using namespace std;
int main(){
start:
int wahl;
//jetz kommt das Menü
cout << "Dein Menue"<< endl;
cout << " Steam -> 1 <- \n" << endl;
cout << " Beenden -> 0 <- \n" << endl;
cout << "Deine Eingabe: " << endl;
cin >> wahl;
if( wahl == 1) //Steam staret.
{
cout << "Steam wird nun gestartet! \n";
system("start C:\\Programme\\Steam\\steam.exe");
system("cls");
goto start;
}
if ( wahl == 0 );
{
cout << "Tschüss..." << endl;
system("cls");
return 0;
}
} nun aber der Pfad von C:\programme....gibt es ja hier nicht, aber was muss dann da stehen, anstatt C:\\Programme\\.... ? Danke schonmal im vorraus für die Hilfe! Mfg André N.
|
T-Virus
Anmeldungsdatum: 5. Januar 2008
Beiträge: 183
Wohnort: Nörten-Hardenberg
|
Hallo, dein "Code" ist mehr als Fehler anfällig :/ Die Steam.exe kann man frei installiere, also hinpacken wo man will, somit ist das ganze mit den pfaden eher nutzlos. Anbei skriptet man nicht mit C++, man programmiert. Der Code würde nicht mal als mieses C durchgehen, da du sachen wie goto verwendest. Was dann noch auffällt ist, dass du die system("cls") etc nutzt. Ist das nicht in der windows.h definiert o.0 Wurde das Programm überhapt mal kompiliert und ausgeführt? Eigentlich müsste der compilier schon mekern, da int main() nicht immer einen Wert zurück gibt. Den return 0; darf nicht in einem extra codeblock stehen :/ MFG T-Virus
|
lilith2k3
Anmeldungsdatum: 14. Dezember 2006
Beiträge: 2999
Wohnort: OS
|
Ist zwar offtopic: Aber, Dir ist schon klar, daß cout eine Ausgabe in stdout schiebt? Also wirst Du unter GNOME so schonmal nix sehen - is ja nicht wie unter Windows, wo dann ein DOS-Fensterchen aufpoppt. Um zu lesen, was Du schönes schreibst, mußt Du schon eine Konsole öffnen - und dann stellt sich die Frage, ob sich der Aufwand lohnt, einen Knopf zu drücken, damit etwas automatisch (sic!) startet. Goto Ungültiges MakroDieses Makro ist nicht verfügbar Sowas macht man nicht! Der Code sieht eher nach Basic vom 64'er aus, was dann schnell in C++ umgescribblet worden ist. Unter Linux gibt's statt
system("cls");
printf("\033[H");
printf("\033[J");[/code]
Sollte dann wohl auch unter C++ analog mit "cout" funktionieren.
Mehr sagt Dir: [code]man console_codes system("start
geht so wohl auch nicht... Ungültiges MakroDieses Makro ist nicht verfügbar Lies Dich bitte ein wenig ein, bevor Du derartige Programme schreiben willst. http://www.pronix.de/pronix-156.html (Falls einer mault: ja! ist ein C-Buch)
wie ich den pfad zu den installierten Programmen in Ubuntu 7.10 beschreiben muss....?
Wahrscheinlich mit einem / statt einem '''.
Hierzu bitte Dateisystem#Hierarchie ← das da lesen.
Lunar hat geschrieben: Mal abgesehen davon, dass ich den Versuch der C++-Programmierung für verfrüht halte, wenn man noch nicht mal das Paketmanagement seines Systems im Griff hat und keine Software nachinstallieren kann.
Ich erinnere mich noch daran *chrchr* .. als wäre es ... Montag gewesen ...
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
T-Virus hat geschrieben: Der Code würde nicht mal als mieses C durchgehen, da du sachen wie goto verwendest.
Na und? Der Kernel ist voll mit gotos. In den Quellen zu 2.6.25 sind es beispielsweise mehr als 50000 (Zum Vergleich: es gibt weniger als 30000 while-Schleifen). Richtig eingesetzt kann es die Übersichtlichkeit des Quelltextes erhöhen, z. B. wenn man aus zwei verschachtelten while-Schleifen herausspringen will, was mit break ja nicht vernünftig geht. Im geposteten Code ist es allerdings komplett sinnfrei. Viel schlimmer als goto ist sowas:
printf("\033[H");[/code]Es gibt wenige Sachen, die Code schwerer verständlich machen, als irgendwelche kryptischen Literale, die scheinbar vom Himmel fallen. Viel leichter verständlich ist z. B. sowas:[code]const char clear_screen_code[] = "\033[H";
std::cout << clear_screen_code; Und das zeigt auch, dass das Auswendiglernen irgendwelcher Dogmen ("Du sollst nicht goto benutzen") einen überhaupt nicht weiterbringt. T-Virus hat geschrieben: Was dann noch auffällt ist, dass du die system("cls") etc nutzt. Ist das nicht in der windows.h definiert o.0
Die Funktion system ist im Header cstdlib deklariert, den er aber nicht eingebunden hat. Und welche Befehle die jeweilige Shell zur Verfügung stellt, steht natürlich nicht in den Headerdateien. T-Virus hat geschrieben: Eigentlich müsste der compilier schon mekern, da int main() nicht immer einen Wert zurück gibt. Den return 0; darf nicht in einem extra codeblock stehen :/
Wenn man in der main nicht explizit per return-Statement etwas zurückgibt, wird implizit 0 zurückgegeben, daher ist es Unfug, dass der Compiler meckern müsste. Und woher hast Du den Unsinn, dass ein return nicht in einen Block gepackt werden darf?
|
lilith2k3
Anmeldungsdatum: 14. Dezember 2006
Beiträge: 2999
Wohnort: OS
|
Der Kernel ist voll mit gotos.
Das macht's dann schöner? Goto ist nicht die Standardlösung! Kernighan&Ritchie hat geschrieben: C provides the infinitely-abusable goto statement, and labels to branch to. Formally, the goto statement is never necessary, and in practice it is almost always easy to write code without it. We have not used goto in this book. Nevertheless, there are a few situations where gotos may find a place. The most common is to abandon processing in some deeply nested structure, such as breaking out of two or more loops at once. The break statement cannot be used directly since it only exits from the innermost loop. Wenn man in der main nicht explizit per return-Statement etwas zurückgibt, wird implizit 0 zurückgegeben
Er dachte wohl an sowas (unter C):
8: Warnung: Kontrollfluss erreicht Ende einer Nicht-void-Funktion
const char clear_screen_code[] = "\033[H";
std::cout << clear_screen_code; Ja, OK, das ist schöner - zufrieden? 😀
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Sollten Konstanten nicht mit Großbuchstaben geschreiben werden?
const char CLEAR_SCREEN_CODE [] = "\033[H";[/code]
Und was ist hier eine angemessene Alternative zu [i]goto[/i]?
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
user unknown hat geschrieben: Und was ist hier eine angemessene Alternative zu goto?
Eine do while-Schleife.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Auch dürfte dieses Semikolon unbeabsichtigt sein:
if ( wahl == 0 );
|
Andre_Neujahr
(Themenstarter)
Anmeldungsdatum: 21. März 2008
Beiträge: 99
Wohnort: Nordsehl
|
Also...nun der , der die frage gestellt hat....dieser skript, wie oben schon erwähnt , geht NICHT unter linux....das war doch auch gar nicht miene Absicht! den habe ich für merin Win geschrieben...und es geht, das if ( wahl == 0 ); war schon richtig, er hat nämlich gemekert , als ich NCIHT da war.... und nur mal soo....für alle....ICH HABE ERST ANGEFANGEN!, ich bin nicht der Programmiere schlecht hin! ich möchte lediglich ein programm (z.B. Pidgin) über die shell durch eine einfache zahl ausführen. Und ausserdem , bin ich mit C++ in Linux noch gar nicht vertraut, dass es .exe nicht unter Linux alleine geht, weiß nich auch.... aber was dann? eine .sh ? Ich weiß es NICHT...ich würde mich über ein WENIG hilfe freuen, denn was ihr dort alles für Hohe kunst gepostet habt, bringt mich leider kein bisschen weiter, sorry...ausser das " Dateisystem#Hierarchie "... Danke schonmal!!! Mfg André N.
|
e1bart0
Anmeldungsdatum: 12. Mai 2007
Beiträge: 927
Wohnort: München
|
Ich finde, dafür ein C++-Programm zu schreiben, ist wie mit Kanonen auf Spatzen zu schießen... Schreib dir lieber ein Shell Script, ein schönes Tutorial gibt's hier: http://www.schatenseite.de/unixshell.html
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
lilith2k3 hat geschrieben: Der Kernel ist voll mit gotos.
Das macht's dann schöner?
Ja. Goto mag als Schleifenersatz hässlichen, unstrukturierten Code erzeugen, aber das kann man dem Schlüsselwort nicht anlasten. Man kann jedes Syntaxkonstrukt missbrauchen. Richtig angewendet, erhöht Goto allerdings imho die Übersichtlichkeit des Quellcodes. Man sollte nicht vergessen, dass auch die try-except-Klauseln anderer Sprachen im Endeffekt nichts anderes sind als typisierte Gotos. Und sie werden auch genau so zur Flusssteuerung eingesetzt. Ein Beispiel: for (i=0; i <= foobar; ++i) {
if (something_went_wrong) {
goto failure;
}
} Das soll angeblich böse sein. Das gleiche in Java dagegen:
for (i=0; i <= foobar; ++i) {
if (something_went_wrong) {
raise new SomethintWentWrongException()
}
} Da stört sich niemand dran, obwohl das im Scope der Schleife ein genau so unbedingter Sprung ist wie das goto zu einem Label.
Noch schöner wird es dann, wenn gotos zum Verlassen innerer Schleifen als "evil" gelten, sich aber niemand daran stört, dass Python immer Ausnahmen zur Flusssteuerung in Iteratoren (miss)braucht. lilith2k3 hat geschrieben: Goto ist nicht die Standardlösung!
Was ist denn deiner Meinung nach die Standardlösung, um Ausnahmen in C abzubilden?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Lunar hat geschrieben: Das gleiche in Java dagegen: for (i=0; i <= foobar; ++i) {
if (something_went_wrong) {
raise new SomethintWentWrongException()
}
} Da stört sich niemand dran, obwohl das im Scope der Schleife ein genau so unbedingter Sprung ist wie das goto zu einem Label.
In Java throw, nicht raise, und mit Semikolon:
for (i=0; i <= foobar; ++i) {
if (something_went_wrong) {
throw new SomethintWentWrongException ();
}
} aber v.a. ist das doch kein unbedingter Sprung, sondern ein durch something_went_wrong bedingter.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Andre Neujahr hat geschrieben: Also...nun der , der die frage gestellt hat....dieser skript, wie oben schon erwähnt , geht NICHT unter linux....das war doch auch gar nicht miene Absicht! den habe ich für merin Win geschrieben...und es geht, das if ( wahl == 0 ); war schon richtig, er hat nämlich gemekert , als ich NCIHT da war....
Wer hat gemeckert als Du nicht da warst? Kannst Du vielleicht Dein Posting erst Korrekturlesen, bevor Du uns solche Rätsel aufgibst? Ist so vielleicht klarer, worauf ich hinauswill:
if (wahl == 0)
;
{
cout << "Tschüss..." << endl;
system("cls");
return 0;
} ?
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
user unknown hat geschrieben: Lunar hat geschrieben: Das gleiche in Java dagegen: for (i=0; i <= foobar; ++i) {
if (something_went_wrong) {
raise new SomethintWentWrongException()
}
} Da stört sich niemand dran, obwohl das im Scope der Schleife ein genau so unbedingter Sprung ist wie das goto zu einem Label.
In Java throw, nicht raise, und mit Semikolon:
Stimmt. Ich habe Java und Python durcheinander geworfen 😉 user unknown hat geschrieben: aber v.a. ist das doch kein unbedingter Sprung, sondern ein durch something_went_wrong bedingter.
Wenn du das so siehst, dann gilt das auch für das goto-Beispiel.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Nein - das ist ganz unabhängig davon wie ich es sehe ein bedingter Sprung und kein unbedingter. Außer something_went_wrong wäre ein const bool = TRUE; (Gibt es bool in C?) - aber so was schreibt ja niemand.
|