myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C++ Leerzeichen in Eingaben

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 19.06.11, 04:38   #1
Xena77
камикадзе
 
Benutzerbild von Xena77
 
Registriert seit: Jun 2010
Beiträge: 38
Bedankt: 3
Xena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt Punkte
Standard C++ Leerzeichen in Eingaben

Tja, ein kleines Problem mit einem Programm das ich gerade schreibe:
Code:
#include<iostream>
#include<windows.h>
#include<conio.h>

using namespace std;

int main() {

    char a2[MAX_PATH];
	

	// restlicher Code

	
    while (end2 >= 1) {
          cout << a1 << ":" ;
          cin>>a2;
    
          if ( a2 == "kill" ) {
               end2=0;
               mend=0;
               }
         system(a2);
         }
}
Wenn ich jetzt zB "CD C:\" Eingebe, wertet das Programm "C:\" als eigenständigen Befehl, dabei will ich ja "CD C:\" als einen Befehl haben jemand eine Idee, wie das umsetzbar wäre?
__________________
. this is . if you like . please paste him into your signature
Xena77 ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 12:10   #2
MaSydJun
Anfänger
 
Registriert seit: Jun 2011
Beiträge: 13
Bedankt: 0
MaSydJun ist noch neu hier! | 0 Respekt Punkte
Standard

Vielleicht musst du den kompletten Batch-Befehl nochmal in Anführungszeichen setzen.
Sprich:

Code:
a2 = "\"" + a2 + "\""
MaSydJun ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 13:13   #3
Xena77
камикадзе
 
Benutzerbild von Xena77
 
Registriert seit: Jun 2010
Beiträge: 38
Bedankt: 3
Xena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt Punkte
Standard

Hatte ich mir auch schon gedacht, gibt aber nen Error:
Code:
invalid operands of types `const char[2]' and `char[260]' to binary `operator+'
__________________
. this is . if you like . please paste him into your signature
Xena77 ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 13:19   #4
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

Soetwas ist nicht möglich du kannst einen String nicht als befehl an System() übergeben.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 13:20   #5
Xena77
камикадзе
 
Benutzerbild von Xena77
 
Registriert seit: Jun 2010
Beiträge: 38
Bedankt: 3
Xena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt Punkte
Standard

Hmm, nagut, kennst du eine andere möglichkeit wie ich innerhalb meines Programms die Befehle ausführen kann?
__________________
. this is . if you like . please paste him into your signature
Xena77 ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 13:52   #6
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

Du kannst die Strings abfragen und dann die entsprechenden Befehle ausführen, btw System-calls sind super unschön und imperformant, programmier lieber gegen die API, haste ein paar möglichkeiten mehr und ist performanter, sei dir aber darüber im klaren das dein Programm dann nicht mehr beliebig portabel ist.(gilt überigens auch für Systemcalls)

btw, wiso Kamikaze und Harakiere? Ist doch japanisch und du kommst nicht wie ein Samurai rüber.^^
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 14:44   #7
Xena77
камикадзе
 
Benutzerbild von Xena77
 
Registriert seit: Jun 2010
Beiträge: 38
Bedankt: 3
Xena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt Punkte
Standard

Zitat:
Zitat von sirleo Beitrag anzeigen
Du kannst die Strings abfragen und dann die entsprechenden Befehle ausführen, btw System-calls sind super unschön und imperformant, programmier lieber gegen die API, haste ein paar möglichkeiten mehr und ist performanter, sei dir aber darüber im klaren das dein Programm dann nicht mehr beliebig portabel ist.(gilt überigens auch für Systemcalls)
Ist halt um einiges umständlicher, aber mal schaun, ich werd mir was einfallen lassen
Zitat:
Zitat von sirleo Beitrag anzeigen
btw, wiso Kamikaze und Harakiere? Ist doch japanisch und du kommst nicht wie ein Samurai rüber.^^
lol
Jetzt besser? xD
__________________
. this is . if you like . please paste him into your signature
Xena77 ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 14:48   #8
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

jaja hast aber deine Sigi deswegen geändert .
Und nein es ist nicht umständlicher, denn durch die API kannst du die Resultate der APIfunktionen und Parameter an die API-Funktionen einfach wie eine normale Funktion übergeben,und musst nicht umständliche Struckturen schaffen, um den Systemcalls ggf parameter zu übergeben bzw die Resultate auszulesen.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 15:02   #9
flotti
Mitglied
 
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
flotti ist noch neu hier! | 0 Respekt Punkte
Standard

das problem liegt darin das cin nur bis zum leerzeichen liest
versuch mal
Code:
 cin.getline(a2,MAX_PATH);
flotti ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 15:12   #10
Xena77
камикадзе
 
Benutzerbild von Xena77
 
Registriert seit: Jun 2010
Beiträge: 38
Bedankt: 3
Xena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt PunkteXena77 leckt gerne myGully Deckel in der Kanalisation! | 10337696 Respekt Punkte
Standard

Danke, das geht

Edit: Jetzt ignoriert er allerdings mein
Code:
 if ( a2 == "kill" ) {
               end2=0;
               mend=0;
               }
__________________
. this is . if you like . please paste him into your signature
Xena77 ist offline   Mit Zitat antworten
Ungelesen 19.06.11, 15:36   #11
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

Hmm systemcalls akzeptieren doch einen String,aus der benutzereingabe... interessant(oder mein alter kompiler hat damals gemeckert,ka). wieder was dazugelernt.

Code:
#include<iostream>
#include<sstream>

int main(int argc,char**argv){
	std::string  hehe;
	int t;

	std::cin>>hehe;
	if(hehe == "Pause")
		std::cout<<"We are going into pause"<<std::endl,

	system(hehe.c_str());

	return 0;
}
//edit
um es nochmal ausdrücklich zu sagen ist ein sehr sehr schlechter programmierstil sowas,aber egal, zu lernzwecken voll ausreichend.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 09:10   #12
flotti
Mitglied
 
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
flotti ist noch neu hier! | 0 Respekt Punkte
Standard

hat

Code:
 if ( a2 == "kill" ) {
               end2=0;
               mend=0;
               }
denn vorher funktioniert 0o?

strings lassen sich in c nämlich nicht so einfach vergleichen.
entweder du benutzt die entsprechende Funktion aus der String-Bibliothek oder du schreibst dir selber eine, wenn du die String-Bibliothek benutzt brauchst du auch kein "char []" mehr sondern benutzt direkt "String"
wenn du das programm zu übungszwecken schreibst solltest du dir unbedingt eine eigene funktion schreiben um 2 strings zu vergleichen

@sirleo
das mit dem schlechten stil musst erst mal mit quellen belegen, nachdem du behauptet hast das system() keine strings verarbeitet halte ich dich nämlich für nicht besonders kompentent
flotti ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 12:31   #13
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

OK.

2 Sachen:
a) man ist nicht allwissend, und da ich System nur zu anfang meines Programmertums benutzt habe und bei meinem letzten kompiler auf genau diese Sache gestoßen bin(das system keine variablen entgegennimmt) habe ich das so abgespeichert und nicht weiter verfolgt.(zugegeben, ich hätt vorher noch in die Doku schauen können,aber da es sowiso aus dem FF war und ich unterwegs meine Doku nicht dabeihabe)
Abgesehen davon sagt das nur aus das ich kein C++Guru bin der alle Aspekte der Sprache zur Hand hat,aber das habe ich auch nie behauptet.
b)Ob du mich für kompetent hälst oder nicht ist mir im Grunde schnurz.
Du kannst es hinnehmen das System("") schlechter Programmierstiel ist oder nicht.
Es mag zwar der Lesbarkeit keinen Abbruch tun, ABER, ich erstelle damit einen neuen
prozess vom Betriebssystem aus und nun muss ich sicherstellen das ich Parameter
übergebe und das Resultat wiederbekomme.
1.Die Semantik ist bei den executables bezüglich der Parameterübergabe unterschiedlich
und du müsstest die ganze Semantik hartkodiere
damit es sinn macht system mit einer beliebigen variablen aufzurufen.
und dann verändert sich die Semantik oder aber man will eine Funktion aufrufen die
du nicht vorgesehen hast, dann aber Prost mahlzeit.
2.Es ist wie ich schon gesagt habe doch besser die API zu benutzen, da diese sich
besser integrieren lässt und man funktionsaufrufe hat anstellle von Strings.
Abgesehen davon hast du mit der API mehr steuerungsmöglichkeiten, als mit System,
und dein Code kann automatisch überprüft werden(zB von Intellisense)
3.Wenn du System("") benutzt, wie willst du die Resultate verwerten?
etwa mit einem Memory-Mapped File oder shared-memory unter Linux?
(dann muss der aufruf aber für dessen Nutzung ausgelegt sein, was die Programme meistens aber nicht sind, und vor allem:
wie teilst du dem Program mit das der und der Speicherbereich als shared memory zugewiesen wird, wenn du das aufzurufende Programm
nicht selbst geschrieben hast )
Ich glaube kaum das du das problemlos hinbekommst, wenn du System() benutzt,
willkommen in der Präthreataera.


Kurzum was goto für die Lesbarkeit und Wartbarkeit von Code, ist System("") für die Performance und erweiterbarkeit von deinem Code.

Er kann es benutzten wenn er will.
Mach ich auch wenn ich zu faul bin ein paar std::cin.get() einzubauen, da mach ich doch lieber ein System("pause") aber er sollte wissen was er macht, und das tut er nicht, sieht man schon daran das er einen String an system übergibt und die Intetion dahinter ist es eigentlich die Funktionalität der API auf primitive weise Nachzuahmen.

Mal ganz davon ab das sich bestimmte Vorgehensweisen und Codesachen nicht nur an einer Sprache festmachen lassen.

Aber profilier du dich mal.
so long

P.s.:Es ging um C++ code nicht C code und dort ist der Operator== überladen.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 13:59   #14
flotti
Mitglied
 
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
flotti ist noch neu hier! | 0 Respekt Punkte
Standard

ich wollte dich nicht beleidigen indem ich deine c++ -kompetenz (darum geht es hier offensichtlich) in Frage stelle, aber wenn du solche behauptungen machst musst du sie auch begründen, insbesondere wenn deine glaubwürdigkeit ohnehin eingeschränkt ist.

zu a)
- das heißt compiler
- was sollte system sonst als parameter nehmen?
- ich stelle deine kompentenz genau deshalb in frage, weil du einfach sachen behauptest obwohl du dir nicht sicher bist.

zu b)
- kann es dir auch, denn hier geht es nicht um dich...
- er versucht sich wahrscheinlich eine art cmd.exe nachzubauen, weil diese auf schulpc gesperrt ist. in einer konsolenanwedung sieht man auch sofort wie das system antwortet, was für seinen zweck wohl vollkommen ausreicht.
- ausserdem hat die funktion sehr wohl eine rückgabe die sich auswerten lässt:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]


der einzige der sich hier versucht zu profilieren bist du, indem du du anfängern irgentwelches zeug erzählst was du dir mal eben aussem hut gezaubert hast!

ps:
mir ist selbst für die "String"-klasse keine überladung von == bekannt.
siehe auch: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

edit: die überladung fehlt in der referenz, bringt ihm aber nix weil er die string-klasse nicht benutzt
flotti ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 14:20   #15
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

Flame on


@flotti
zu deinem zu a)
Pedant
klar nimmt System() einen String, aber der Kompiler kann ja überprüfen ob es sich um eine variable handelt oder nicht.
bsp.:die winapi ist größtenteils auf C aufgebaut, dh alle Datentypen von Microsoft werden mehr oder weniger auf die vorhandenen datentypen abgebildet, aber der Compiler meckert dann doch rum wenn du nicht genau die Bezeichnung nimmst(ok kommt auf das warninglevel drauf an)
In bestimmten fällen kompiliert er nur wenn du ein total abgefahrenes CastKonstruckt zur hand nimmst.

Und das ich nicht sicher bin kann man mir ja nicht gerade vorwerfen.
evtl ein bischen zu sicher ja, aber immerhin kann ich C++ programmieren

zu deinem zu b)

Wenn die cmd.exe auf den Schulpc's gesperrt ist, dann halte ich mich speziell von System() fern denn das benutzt ja die cmd.exe, kannst genauso gut behaupten ich darf per [windows+r] die regedit nicht aufrufen, versuch das nun aber per System(), geht nicht, aber die API ist nicht gesperrt.

Und das System() einen rückgabewert hat weiss ich, mir ging es auch nicht um den Rückgabewert ob die Aktion erfolgreich war oder nicht, sonder um beliebige Datenmengen.

btw.:und du zauberst dir nix aus dem Hut oder wie? ich belege meine Behauptungen wenigstens mit erklärungen.

Oh und zu deinem PS.:
sagst hier immer kenne mich nicht aus, aber: wiso funktioniert dann folgender Code?


So long

Flame off

@Xena77
sry wegen dem geflamme, aber konnte nicht wiederstehen.
Das gute nun kannste dir selbst aussuchen wasde wie machst.bb
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 15:17   #16
flotti
Mitglied
 
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
flotti ist noch neu hier! | 0 Respekt Punkte
Standard

ich hab mich 3 min später korrigiert... pkt für dich...bringt immer noch nix solange er char [] benutzt.
ich bin damals in der schule durch die verwendung von system() regelmäßig zu einer internetverbindung gekommen obwohl cmd.exe gesperrt war ...soviel zum thema windows und sicherheit
flame on
aus rücksicht auf Xena77 spare ich mir das...
flame of
flotti ist offline   Mit Zitat antworten
Ungelesen 20.06.11, 15:21   #17
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

ok
nur so nebenbei, std::string hat eine methode c_str() mit der du die char*repräsentation von std::string ausgeben kannst(siehe mein code weiter oben) und mit getline(std::cin,einvarvomtypstring) aus der string-bibleothek kann man mehr als ein wort (nur so der vollständigkeit halber, da std::cin.getline() für strings nich definiert ist )einlesen.
so long
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
sirleo ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.


Sitemap

().