[ Pretender @ 23.04.2004. 22:11 ] @
| Ko o cemu, ja o command lajnu.
Code: //: S07:Text.cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Text {
string text;
public:
Text() {}
Text(const string& fname) {
ifstream ifs(fname.c_str());
string line;
while (getline(ifs, line))
text += line + '\n';
}
string contents() {
return text;
}
};
int main(int argc, char* argv[]) {
if (argc > 1)
{
Text t1;
Text t2(argv[1]);
cout << "t1 :\n" << t1.contents() << endl;
cout << "t2 :\n" << t2.contents() << endl;
}
}
///:~
Kako god da prosledim ime neke datoteke kao argv[1] u kom.liniji, na izlazu dobijem samo
t1:
t2:
iako bi posle t2 trebalo da sledi sadrzaj doticne datoteke.
Posto je argument pointer, trbalo bi u kom.liniji da prosledim adresu fajla, ali kako ?
Kompajler je Dev-Cpp.
TX |
[ Časlav Ilić @ 24.04.2004. 05:59 ] @
Taj program radi baš kako treba, možda si u komandnoj liniji zadao nepostojeću datoteku... U principu je dobro da kad god otvaraš datoteku proveriš da li je zaista i otvorena, tj. mogao bi funkciju
Text(const string& fname) da napišeš kao:
Code:
Text(const string& fname) {
ifstream ifs(fname.c_str());
if (ifs) {
string line;
while (getline(ifs, line))
text += line + '\n';
}
else
cout << "Text::Text: Cannot open file " << fname << endl;
}
[ Pretender @ 24.04.2004. 13:06 ] @
Ne sumnjam da program radi dobro, samo ne znam kako da ispravno prosledim ime fajla.
Prosirio sam konstruktor Text, kako si predlozio, i on redovno izbacuje poruku: Cannot open file ...
Ako npr. u direktorijumu PROJEKTI (u koji Dev smesta sve fajlove), imam ImeFajla.cpp , ja u kom. liniju stavim >Text (ImeFajla) ili >Text (ImeFajla.cpp) ili >Text ("ImeFajla.cpp") u cemu ocigledno gresim, jer program ne moze da otvori trazeni fajl.
Ne koristim nepostojece fajlove; ni >Text (Text.cpp) /itd/ ne daje rezultat.
TX
[ Časlav Ilić @ 24.04.2004. 14:39 ] @
U tom slučaju, ubij me ako znam u čemu je problem :) Evo baš sam isprobao program, kada ga normalno pokrenem, ./testprog testprog.cc, normalno i dobijem listing datoteke testprog.cc u konzoli.
[ Pretender @ 24.04.2004. 17:42 ] @
Ipak si mi pomogao!
Tvoj post (primer) me je podsetio da argumente u komandnoj liniji ne treba stavljati u zagrade ;))
Besten Dank
[ milanche @ 24.04.2004. 19:44 ] @
Takodje je vrlo dobra praksa da svaki command-line argument stavljas u duple navodnike.
Razlog:
recimo da se fajl nalazi u C:\Documents and Settings\Pretender\Desktop.
Kad ne bi bilo navodnika, moglo bi se greskom shvatiti da ima tri argumenta
(prvi bi bio 'C:\Documents', drugi 'and' i treci 'Settings\Pretender\Desktop').
Svi komercijalni programi su pravljeni da korektno izdvajaju sve izmedju duplih
navodnika, a da same duple navodnike uklanjaju. Za svoj program moras da se
sam potrudis da ga napravis da sledi trend, sto nije mnogo tesko.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.