Variable in einem Befehl?



  • Sooo, ich hab mich mal hier im Forum registriert 😉
    Erstmal sorry für die vielen Doppelposts 🙂

    Ich habe den Code schonmal editiert, dass nur noch die Variable eingesetzt werden muss.

    #include<iostream.h>
    #include<conio.h>
    #include<dos.h>
    main()
    {
          char IP,Text;
          cout<<"Net Send Chat v.0.1 Beta\n\n";
          cout<<"Bitte geben Sie Ihren Text ein: ";
          cin>>Text;
          cout<<"Bitte geben Sie die IP an: ";
          cin>>IP;
          system ("net send <<IP<<" "<<Text");
          getch();
          }
    

    Dann gibt es noch ein anderes Problem...Wie schaffe ich es, dass man bei der Texteingabe mehr als 1 Buchstabe eingeben kann?



  • 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);
    
    1. Die Schleife um den Aufruf der system-Funktion rausnehmen.
    2. 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.htm

    Am 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.htm

    Am 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 Compiler 😉

    bis 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 😕


Anmelden zum Antworten