PDA

View Full Version : [C++] problema argc argv


Cory
30-01-2009, 11:32
Innanzitutto mi presento, visto che sono nuovo di qui :D
Mi chiamo Michele e frequento il primo anno della facoltà di Informatica, mi sono iscritto sul forum nella speranza di trovare aiuto in quella materia così affascinante ma anche ostica che è la programmazione.

Veniamo subito al dunque: non mi è per nulla chiaro come debbano essere utilizzati i parametri int argc e char* argv[] nella funzione main per poter programmare su più file. Esempio pratico: voglio fare un programma che mi legge in input un file .txt e mi scriva in output su un altro .txt mettiamo caso solo le lettere "a".
Includo quindi la libreria <fstream> e dichiaro il nome degli stream di input e output. Tuttavia non ho capito come utilizzare argc e argv all'interno del codice. Nello specifico:

using namespace std;
#include<iostream>
#include<fstream>
#include<cctype>

int main(int argc,char* argv[]){

fstream input, output;
char ch;

input.open("input.txt", ios::in);
output.open("output.txt", ios::out);

while((input.get(ch)) && isalpha(ch)) {

if(ch=='a')
output.put(ch);

}

input.close();
output.close();
}

Il programma mi crea correttamente il file output.txt ma non ci scrive nulla.
Grazie in anticipo a chi mi aiuterà :)

Mesh89
30-01-2009, 15:36
A me funziona. Hai messo un file input.txt corretto? (stesso path dell'eseguibile, delle a...)

Cory
30-01-2009, 16:29
ovviamente sì, con del testo incollato da un sito a caso.
Specifico meglio: il codice del mio primo post è stato scritto su Windows con CodeBlocks.
In realtà io ho bisogno di programmare sotto Ubuntu perchè l'esame si svolge sotto questo OS.
Al momento della compilazione digito

./a.out input.txt output.txt a

e il compilatore mi restituisce questo errore
g++: a: Nessun file o directory


ho modificato il codice come segue

using namespace std;
#include<iostream>
#include<fstream>
#include<cctype>

int main(int argc, char* argv[]){


fstream input,output;
char ch, temp;

input.open("input.txt",ios::in);
output.open("output.txt",ios::out);

temp=*argv[3];

while(input.get(ch)){

if(isalpha(ch)&& ch==temp)

output.put(ch);
}
input.close();
output.close();

return 0;
}

Da quel che ho capito argv[3] identifica il terzo elemento del comando che do al compilatore al momento della compilazione, cioè 'a'. Ma mi da l'errore di cui sopra...:muro: :muro:

Mesh89
30-01-2009, 16:47
Aspetta aspetta... Che significa

Al momento della compilazione digito ./a.out input.txt output.txt a ?

La compilazione si fa così:

g++ programma.cpp

mentre il programma si avvia così

./a.out input.txt output.txt a

E come prima, mi funziona tutto (sono sotto Ubuntu).

Cory
30-01-2009, 16:48
ehm come non detto..
sbagliavo a compilare :muro:

dovevo prima fare g++ file.cc :doh:

danieljsoffio
12-02-2009, 19:21
ciao, anche io sono nuovo di qst forum, quindi mi presento, mi chiamo daniele. Anche io sono alle prese con programmazione, e ho lo stesso problema, ho anche provato a copiare il codice, ma, anke se mi compila e mi crea il file, nel file "output.txt" non mi scrive niente !!!:help: