Mein Ziel ist das C++ programmieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: Mein Ziel ist das C++ programmieren

Beitrag von Gunman1982 » 25.10.2013 04:44:11

Du willst diese grafischen Textbubbles in vermutlich gnome?!

Schau dir libnotify an: https://wiki.archlinux.org/index.php/libnotify#C.2B.2B

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 25.10.2013 05:50:38

Allen Postings gleichzeitig, zu entsprechen kann ich nicht. Also lass ich den C++ Quelltext weg,, der sollte wenn möglich individuell sein.
Mein Ziel ist das C++ programmieren, ich will mehrere Instanzen von gedit, oder cp ,Alert etc starten.
Und dass alles aus einem C++ Quelltext ( gcc kompilert).
Die Programme sollten in einer Konsole, die Systembefehle in der selbigen Konsole sequentiel oder parallel starten können.

Sequentiel entspricht nacheinnander.
Paralell entspricht Multitasking.

Gibtes denn keine Möglichkeit das Systemkommando von C++ Quelltext(kompiliert zu löschen? >>>str.clear(); half nicht
Wie kann ich printf ausführbar machen? >>>

Code: Alles auswählen

printf("cp\n\n");
<<< Codeshniplet startet nicht

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 25.10.2013 07:53:55

DEBIANUNDANDREAS hat geschrieben: Derfolgende code funktioniert nur einmal.
....

Code: Alles auswählen

std::string command="gedit --new-window & gedit --new-window & gedit --new-window";
    system(command.c_str());
...
------------------------------------------------------------------------
Ich möchte aber mehrfach so eine Codezeile nutzen können, oder eben eine bessere Alternative in C++
Hier liegt offenbar der Kern deines Problems. Eine Deklaration- bzw Definition einer Variablen sollte nur einmal vorkommen.
Nachfolgend benutzt man sie einfach.
Wenn ich mich nicht irre, verhalten sich die C-Strings ähnlich wie der die Java-Stringbuffer-Objekte, d.h. man kann neue Inhalte zuweisen.
Das sollte auch ganz einfach mit dem Operator '=' gehen, da dieser überladen ist (alternativ könnte man auch clear/insert verwenden) .

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
    string command="gedit --new-window &";
    system(command.c_str());

    command="cp quelle ziel";
    system(command.c_str());

    command="find . -name '*.cpp' -ls";
    system(command.c_str());

    return 0;
}


Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Mein Ziel ist das C++ programmieren

Beitrag von schorsch_76 » 25.10.2013 08:00:14

Wenn du parallel starten willst, macht man das
a) mit forken
b) über Threads.

Bsp.

Code: Alles auswählen

#include <boost/thread.hpp>
#include <vector>

void DoCommand()
{
	std::string command = "gedit --new-window";
	std::system(command.c_str());
}

int main(int argc, int argv)
{
	static const int nr_of_threads = 10;
	boost::thread_group my_threads;

	// start all threads
	for (int i = 0; i < nr_of_threads; ++i)
	{
		my_threads.add_thread(new boost::thread(DoCommand));
	}

	// join them
	my_threads.join_all();

	return 0;
}
Gruß
schorsch

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: Mein Ziel ist das C++ programmieren

Beitrag von peschmae » 25.10.2013 08:08:55

Mit forken wärs dann sowas, um mehrere Instanzen parallel laufen zu lassen:

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
#include <string>

#include <unistd.h>

using namespace std;

int main(int argc, char *argv[])
{
    for (int i = 0; i < 3; ++i)
    {
        pid_t pid = fork();
        if (pid == 0)
        {
             std::cout << "we are the child process" << std::endl;
             execl("/usr/bin/gedit", "");
        }
    }

    return 0;
}
Damit bist du dann allerdings im Land der hässlichen, plattformabhängigen Unix-C-APIs angelangt...

MfG Peschmä

P.S. wenn dein erster Post ausgesehen hätte wie der vierte, und du da sogar noch hingeschrieben hättest was du eigentlich erreichen willst (und damit meine ich nicht "es funktioniert nicht", sondern was es eigentlich machen soll) dann hättest du unsere beiden Antworten auch schon vor laaaanger Zeit gekriegt....
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 25.10.2013 08:31:07

Danke an alle Postings, ihr habt mir freundlicherweise, trotz der sprachlichen verständnisproblem auf neue Gedanken ( in Sachen C++) gebracht.
Ich werde eure Codelistings ausprobieren. Die Codelistings sind nur für meinen privaten Eigenbedarf vorgesehen, und so werde ich das handhaben.
Danke an newdeb
danke an schorsch_76
Danke an peschmae

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 26.10.2013 13:53:18

Dieser Code ist mein Favorit von und Danke an newdeb. Aber ...

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
    string command="gedit --new-window &";
    system(command.c_str());

    command="cp quelle ziel";
    system(command.c_str());

    command="find . -name '*.cpp' -ls";
    system(command.c_str());

    return 0;
}
Ich bekomme es nicht in dir Recoverykonsole, zum laufen.
Wie könnte man den C++ Quelltext nocheinmal ändern damit das Kompilat in der Recoverkonsole funktioniert?
Diesen C++ Code Sniplet hatte ich im Quelltext gelöscht.

Code: Alles auswählen

string command="gedit --new-window &";
system(command.c_str());

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 27.10.2013 12:58:46

Zur Zeit habe ich den Quelltext geändert aber ich bekomme das mit switch,case, break nicht hin. Meine C++ Ide ist Code::Blocks und die ist zum verzweifeln.

Mein C++ Code. Wichtig nur für den privaten Gebrauch.
http://nopaste.debianforum.de/37432 <<< Die Komentarezeilen dienen zur späteren Komplierung.

Code::Blocks gibt folgenden output
  • ||=== Project3, Release ===|
    che/Programmieren/output/Project3/main.cpp|39|Fehler: case-Marke »1« nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|91|Fehler: case-Marke »2« nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|108|Fehler: case-Marke nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|44|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|49|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|54|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|60|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|65|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|71|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|77|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|83|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|95|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|99|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    ||=== Erstellen beendet: 13 Fehler, 0 Warnungen===|
Zuletzt geändert von DEBIANUNDANDREAS am 28.10.2013 06:11:04, insgesamt 2-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8081
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Mein Ziel ist das C++ programmieren

Beitrag von TRex » 27.10.2013 13:19:35

Wie gehst du das eigentlich an, das mit dem C++ lernen? Hast du ein Buch, eine Webseite oder andere Lektüre, die dir die Sprache näher bringt?

Die ersten drei Fehler sind (einfache) Syntaxfehler. Die Fehler über den Rückgabewert sind nur Warnungen, die in deinem Fall irrelevant sind.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 27.10.2013 13:45:10

Danke, für die Nachfrage, mehrere Bücher von C++ habe ich schon, aber Druckfehler im Buch, ich werde das Problem im Quelltext, und das tue ich auch, durch auskommentieren lösen, ich bin meinem Ziel schon sehr nahe, es ist erreichbar man kann C++ die geschweifte Klammer an eine ander stelle setzen dann gehts.
Code im Buch

Code: Alles auswählen

... switch( befehl );
Mein lösung

Code: Alles auswählen

... switch( befehl ){;
...
Mit anderen Worten, die geschweifte Klammer offen nach recht's, der steile Zahn nach link's das bringt's.

Benutzeravatar
TRex
Moderator
Beiträge: 8081
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Mein Ziel ist das C++ programmieren

Beitrag von TRex » 27.10.2013 14:21:02

Was du da machst, nennt man nicht programmieren... das ist Trial & Error ohne nennenswerte Grundlage... und verbrenn das Buch, das erzeugt wenigstens Wärme. So bringts garnix. Nimm eines der anderen Bücher. Wie heißt das denn, damit man einen großen Umweg drum machen kann?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 27.10.2013 15:37:54

Soll ich dir TRex (Moderator) per P/N, den Buchtitel mit ISBN Nummer zuschicken ?

Radfahrer

Re: Mein Ziel ist das C++ programmieren

Beitrag von Radfahrer » 27.10.2013 15:49:34

Warum schreibst du es nicht einfach hier rein? Oder ist das Buch so gefährlich und geheim?

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 28.10.2013 08:37:10

DEBIANUNDANDREAS hat geschrieben:Ich bekomme es nicht in dir Recoverykonsole, zum laufen.
Wie könnte man den C++ Quelltext nocheinmal ändern damit das Kompilat in der Recoverkonsole funktioniert?
In deiner Entwicklungsumgebung solltest du dich schon auskennen. Ich kann dir in diesem Punkt nicht weiterhelfen.
Ich hatte das Beispiel im vi editiert und auf der Konsole mit g++ kompiliert.
DEBIANUNDANDREAS hat geschrieben:Diesen C++ Code Sniplet hatte ich im Quelltext gelöscht.

Code: Alles auswählen

string command="gedit --new-window &";
system(command.c_str());
Damit hast du die Deklaration von "command" gelöscht. Das mag der Compiler nicht.

Die Warnungen kann man durch Auswertung des Returncode von "system" vermeiden. Hier mal etwas Beispielcode:

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
#include <iostream>
#include <cstdlib>
#include <stdio.h>
using namespace std;

int main(int argc, char *argv[])
{
    string command;
    int rc, stat;

    command="ls -ltr";
    if ((rc = system(command.c_str())) == -1)
        fprintf(stderr, "fork failed\n");
    else
        switch (stat = WEXITSTATUS(rc)) {
          case 0:
               printf("command sucessfully executed\n");
               break;
          case 127:
               fprintf(stderr, "cannot execute /bin/sh\n");
               break;
          default:
               fprintf(stderr, "child's exit status is %d\n", stat);
               break;
       }
    return 0;
}
(Entschuldige, dass ich printf / fprintf verwende, ich bin nur C-Programmierer :) )

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 28.10.2013 13:35:15

Danke an den User newdeb.
Wenn wir schon beim Thema währen wie werden switch case Anweisungen in C++ verschachtelt?
Wen Verschachtelung, reicht ein default für beide switch? >>
Und wenn eine Verschachtelung >>

Code: Alles auswählen

...
...
switch( befehl ){;
switch( befehl ){;

case 0 : cout << endl;
case 1: cout << endl;
break;
}
break;
default : cout << endl;
}
\?

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 28.10.2013 17:47:04

Das innere "switch" muss in einem case-Fall des äußeren "switch" stehen, damit der Programmfluss das innere switch erreichen kann.
Die switch-Blöcke haben jeweils ihre eigenen Defaults.
Dieses Semikolon am Ende ist unnötig, da der switch-Block hier erst geöffnet wird (analog Funktionsblock):

Code: Alles auswählen

switch( befehl ){;

Antworten