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, 15:36   #1
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   #2
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   #3
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   #4
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   #5
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   #6
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   #7
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 00:18 Uhr.


Sitemap

().