Variable in einem Befehl?
-
DANKE! Das funktioniert einwandfrei!
Nur noch 2 Fragen:
1. Wie schaffe ich es, dass die Nachricht nur 1 mal an den User geschickt wird?
2. Welchen Befehl gibt es, dass das Skript nach einer Abfrage wieder zum Anfang springt? (z.B. "Möchtest du erneut eine Nachricht schreiben? Ja/Nein"Gruß Martin
-
Guck dir mal den Quellcode von akari an. Der macht genau das was du möchtest.
Eventuell wäre es noch interessant statt mit cout mit getline einzulesen um auch Leerzeichen mit einzulesen:string text; getline(cin, text);
- Die Schleife um den Aufruf der system-Funktion rausnehmen.
- Eine Schleife um das Programm bauen die abfragt ob man weitermachen will oder nicht. Dazu gibt es schon einiges im Forum.
Am Besten du siehst dir mal in einem Tutorial das Thema Schleifen an.
-
M4rt!n schrieb:
1. Wie schaffe ich es, dass die Nachricht nur 1 mal an den User geschickt wird?
Indem du die do-Schleife wegläßt?
M4rt!n schrieb:
2. Welchen Befehl gibt es, dass das Skript nach einer Abfrage wieder zum Anfang springt? (z.B. "Möchtest du erneut eine Nachricht schreiben? Ja/Nein"
Indem du Eingabe mit in die Schleife nimmst mit einer entsprechenden Abfrage.
bis bald
akari
-
Ich versteh nicht ganz was du meinst ?? Sorry, fange gerade erst an mit C...
Wegen dem Script Neustart...Ich habe das schonmal editiert so wie ich mir die Abfrage vorstelle, da fehlt jetzt nur noch der Befehl dass der wieder zum Anfang von Skript springt (wisst ihr die?):
#include <iostream.h> // ohne h #include <string.h> #include <conio.h> #include <dos.h> main() { std::string ip,text; int i; char neustart; cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; cin>>ip; cout<<"Bitte geben Sie den gewünschten Text ein:\n"; cin>>text; std::string command = "net send " + ip + " " + text; do { system (command.c_str()); i++; } while (i!=1); cout<<"Möchtest du noch eine Nachricht schreiben? [J/N] "; cin>>neustart; if (neustart=='J') ....................... getch(); }
-
Hallo
#include <iostream> // ohne .h ! #include <string> // ohne .h #include <conio.h> #include <dos.h> main() { std::string ip,text; char neustart; std::string command; do { cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; cin>>ip; cout<<"Bitte geben Sie den gewünschten Text ein:\n"; getline(cin, text); command = "net send " + ip + " " + text; system (command.c_str()); cout<<"Möchtest du noch eine Nachricht schreiben? [J/N] "; cin>>neustart; } while (neustart != 'J'); getch(); }
bis bald
akari
-
Vellas schrieb:
Am Besten du siehst dir mal in einem Tutorial das Thema Schleifen an.
Dann solltest du dir diesen Ratschlag von mir, den ich eben gepostet hatte zu Herzen nehmen und hier gucken:
http://tutorial.schornboeck.net/schleifen.htmAm Besten machst du die Schleife um das ganze Programm rum.
-
Also, das mit dem einmal schreiben hab ich schonmal hinbekommen...
Jetzt brauch ich nur noch den Befehl zum zürückspringen...Wie könnte ich das einbinden? Wie könnte die do-while Schleife Aussehen?
main() { std::string ip,text; char neustart; cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; cin>>ip; cout<<"Bitte geben Sie den gewünschten Text ein:\n\n"; cin>>text; std::string command = "net send " + ip + " " + text; system (command.c_str()); getch(); }
PS: Es gibt doch noch ein Problem, und zwar werden nicht alle Wörter die man schreibt ausgegeben, sondern nur das erste...Woran liegt das?
Martin
-
Vellas schrieb:
Vellas schrieb:
Am Besten du siehst dir mal in einem Tutorial das Thema Schleifen an.
Dann solltest du dir diesen Ratschlag von mir, den ich eben gepostet hatte zu Herzen nehmen und hier gucken:
http://tutorial.schornboeck.net/schleifen.htmAm Besten machst du die Schleife um das ganze Programm rum.
Sorry, nicht direkt gesehen...Danke!
PS: Anscheinend bei Bloodshed Dev <iostream> doch mit .h, weil wenn ich es weglasse funktioniert es nicht...
-
@Akari: Das funktioniert irgendwie nicht
Wenn man die IP eingegeben hat kommt eine Fehlermeldung:
"Das Senden von Dateien wird nicht länger unterstützt ..."
Außerdem wird das Skript nicht neugestartet, wenn man J eingibt
-
M4rt!n schrieb:
PS: Anscheinend bei Bloodshed Dev <iostream> doch mit .h, weil wenn ich es weglasse funktioniert es nicht...
Haste
using namespace std;
drin? Wenn nicht, sollte es damit gehen. Habe mit der IDE (Version 5) auch schon paar mal programmiert ohne Probleme.
-
Ich hab das ganze jetzt so gemacht:
#include <iostream.h> // ohne h #include <string.h> #include <conio.h> #include <dos.h> main() { std::string ip,text; using namespace std; char neustart; do { cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; cin>>ip; cout<<"Bitte geben Sie den gewünschten Text ein:\n\n"; cin>>text; std::string command = "net send " + ip + " " + text; system (command.c_str()); cout<<"Möchtest du erneut einen Text eingeben [J/N]? "; cin>>neustart;} while (neustart=='N'); getch(); }
Hab das "using namespace std;" oben eingebunden, es kommt aber trotzdem immer nur 1 Wort an...Kennt C++ keine Leerzeichen?
Und die Schleife funktioniert auch nicht so wie ich mir das denkt...Es kommt zwar die Abrage, aber egal was ich drück...das Skipt fängt nicht neu von oben an...
edit: Korrigiere! Der Neustart funktioniert jetzt doch! War bloß ein Logik-Fehler von mir. Hatte N statt J drin stehen...
Bleibt nur noch das Problem übrig, dass nur 1 Wort ankommt...
-
Hallo
irgendwie scheinst du die Veränderungen, die ich meinem letzten Post geschrieben habe zu ignorieren...
bis bald
akari
-
Hab den Code ausprobiert, aber er hat nicht funktioniert...Hab die Fehlerbeschreibung auch ein paar Posts weiter oben reingeschrieben...
Meinst du diese Änderung?:
getline(cin, text);
Ich habe nur noch das Prob, dass der Text beim User nicht vollständig ankommt, sondern nur das 1. Wort davon
Kann es sein, dass C++ keine Leerzeichen unterstützt? Kann man das dem irgendwie beibringen?
-
Hallo
klar unterstützr C++ Leerzeichen. Die Frage ist eher ob net send leerzeichen unterstützt.
Du kannst ja auch noch den text in Hochkommas einfassen#include <iostream> // ohne .h ! #include <string> // ohne .h #include <conio.h> #include <dos.h> main() { std::string ip,text; char neustart; std::string command; do { cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; cin>>ip; cout<<"Bitte geben Sie den gewünschten Text ein:\n"; getline(cin, text); cout << "Sende Text " << text << std::endl; command = "net send " + ip + " \"" + text + "\""; system (command.c_str()); cout<<"Möchtest du noch eine Nachricht schreiben? [J/N] "; cin>>neustart; } while (neustart != 'J'); getch(); }
bis bald
akari
-
Hmmm, hab mal deine Änderungen mit den Anführungsstrichen übernommen..Bringt nix..
Übrigens: Wenn ich deinen Code in mein Programm übernehme, funktioniert das erst gar nicht...
PS: Ich denke schon dass net send leerzeichen unterstüzt, wenn man es über den Befehl "Ausführen" bei windows macht, klappt es ja auch
PPS: Ganz am Anfang, als ich diesen Code hier benutzt habe
system ("net send IP bla bla bla");
hat es ja auch geklappt
PPPS: Bei mir sieht das ganze mittlerweile so aus
#include <iostream.h> #include <string.h> #include <conio.h> #include <dos.h> main() { std::string ip,text; char neustart; std::string command; do { //Eingabeaufforderung IP cout<<"\n\nBitte geben Sie eine IP oder einen PC-Name an: "; cin>>ip; //Eingabeaufforderung Text cout<<"Bitte geben Sie den gew"<<char (129)<<"nschten Text ein: "; cin>>text; getline(cin, text); cout << "Sende Text " << text << std::endl; command = "net send " + ip + " \"" + text + "\""; system (command.c_str()); cout<<"M"<<char (148)<<"chtest du erneut einen Text eingeben [J/N]? "; cin>>neustart; } while (neustart=='J'); getch(); }
-
Hallo
also ich habs nochmal alles bei mir ausprobiert, und so läufts 100%
#include <iostream> // ohne .h ! #include <string> // ohne .h #include <conio.h> #include <dos.h> main() { std::string ip,text; char neustart; std::string command; do { std::cout<<"Bitte geben Sie eine IP oder einen PC-Name ein: "; std::cin>>ip; std::cout<<"Bitte geben Sie den gewünschten Text ein:\n"; getline(std::cin, text); std::cout << "Sende Text " << text << std::endl; command = "net send " + ip + " \"" + text + "\""; system (command.c_str()); std::cout<<"Moechtest du noch eine Nachricht schreiben? [J/N] "; std::cin>>neustart; } while (neustart != 'N'); }
Auch mit Leerzeichen im Text.
Wenn das nicht geht hast du einen nicht Standard-konformen Compilerbis bald
akari
-
Habe "Bloodshed Dev C++"
Ist der nicht gut?
PS: Habe gerade deinen übernommen, jetzt zeigt er keine Fehler mehr an bei compilen...Jetzt überspringt er aber die Texteingabe...Soll heißen, ich gebe PC-Namen an und er springt direkt weiter....
"Nachricht wurde gesendet" , obwohl ich keine geschrieben hab
-
Hallo
dann machst du etwas falsch bei der Eingabe.
Bei mir läufts korrekt.bis bald
akari
-
Hmmm, wir kommen der Sache näher...
Es scheint bei mir an
getline(std::cin, text);
zu liegen...Hab es durch
std::cin>>text;
ersetzt...Jetzt schickt er zwar die Nachricht, aber auch nur das erste Wort und die Abrfrage ob J oder N wird ganz übersprungen
-
Das liegt daran dass von der letzten Eingabe noch das \n im Eingabepuffer hängt. getline liest nunmal bis zum nächsten \n. Du musst den Eingabepuffer nach einer Eingabe mit >> bis zum \n leeren.
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
Da allerdings normalerweise sowieso jede Eingabe mit Return abgeschlossen wird empfiehlt es sich oft nur mit getline zu lesen.