Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C++ map<string, string> kuvamine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Kymps
HV vaatleja

liitunud: 24.10.2012




sõnum 24.10.2012 20:24:03 C++ map<string, string> kuvamine vasta tsitaadiga

Ühesõnaga tahan teha CL programmi, mis oskab lugeda "arguemente", salvestab need mapi ja hiljem kuvab need. Millegi pärast viimane tegevus ei toimu. Miks?

c++:
  1.  
  2. #include <iostream>
  3. #include <map>
  4. #include <string>
  5. #include <sstream>
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc,char *argv[]) {
  10.     if(argc <= 1)  {
  11.         cout << "No arguments provided";
  12.         //displayHelp();
  13.     }
  14.     map<string, string> args;
  15.     map<string, string>::iterator vars;
  16.     for(int i = 1; i < argc; i++) {
  17.         stringstream ssArg;
  18.         string sArg;
  19.         ssArg << argv[i];
  20.         ssArg >> sArg;
  21.         if(argv[i] == "-") {
  22.             bool argument = true;
  23.             if(sArg == "-h") {
  24.                 argument = false;
  25.             }
  26.             if(argument) {
  27.                 i++;
  28.                 stringstream ssArg2;
  29.                 string sArg2;
  30.                 ssArg2 << argv[i];
  31.                 ssArg2 >> sArg2;
  32.                 args[sArg] = sArg2;
  33.             } else {
  34.                 args[sArg] = "0";
  35.             }
  36.         }
  37.     }
  38.     for (vars = args.begin(); vars != args.end(); vars++) {
  39.         cout << (*vars).first << " => " << (*vars).second << endl;
  40.         cout << "123" << endl;
  41.     }
  42.     cout << "It works?" << endl;
  43. }
  44.  

_________________
Ei.
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 24.10.2012 22:30:46 vasta tsitaadiga

Ei ole midagi näidata, kuna argv[i] ei saa kunagi olla "-". Küll aga saab näiteks argv[i][0] olla '-' (aga mitte "-").
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
Kymps
HV vaatleja

liitunud: 24.10.2012




sõnum 24.10.2012 22:58:05 vasta tsitaadiga

Tjah, alguses oligi if(argv[i][0] == "-"), aga selle peale viskas kompilaator errori. Kui "-" asendada '-'ga, siis töötab tõesti, aitäh. Oskad ehk seletada, mis vahe neil kahel on?
_________________
Ei.
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 25.10.2012 00:05:37 vasta tsitaadiga

"a" on \0'ga lõppev char array, 'a' on char

ehk siis argv[i] tüüp on char *, st viit char tüüpi muutujale, "-" on samuti char *, aga asub mälus teises kohas, st need kaks ei saa antud juhul võrduda (võrreldakse viita, mitte väärtust). error tuligi selle pärast, et sa üritasid viita väärtusega võrrelda.
argv[i][0] tüüp on char (sisuliselt 8-bitine märgiga arv), '-' on sama moodi char ja need on võrreldavad. nt ('-' == 45) on tõene.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C++ map<string, string> kuvamine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.