PDA

Visualizza la versione completa : [C] Problema Con Argv E Argc


maurymg
31-01-2008, 15:28
Salve ragazzi,sto provando a disporre in matrice dei valori inseriti direttamente dal prompt dei comandi.Pensavo si facesse così:


#include<stdio.h>
#define R 3
#define C 3

int matrix[R][C];
void crea(int[]);
void stampa();
main(int argc,int *argv[])
{
crea(argv[1]);
stampa();
getch();

}
void crea(int line[])
{
int r,c,i=0;
for(r=0;r<R;r++)
for(c=0;c<C;c++)
matrix[r][c]=line[i++];
}
void stampa()
{
int c,r;
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
printf("%d\t",matrix[r][c]);
printf("\n");
}
}



ma come output mi restituisce una serie di numeri senza alcun senso....
Qual'è l'errore?
Grazie anticipatamente.

pallinopinco
31-01-2008, 15:37
Qual'è l'errore?


Il tuo codice ne contiene molti. Ti sei chiesto a cosa serva argc? :)

Quale criterio vuoi adottare per inserire argc elementi in un vettore bidimensionale?

oregon
31-01-2008, 15:42
Guarda che argv[] non e' un vettore di puntatori ad interi, come hai scritto in

int *argv[]

ma e' un array di puntatori a stringhe

char *argv[]

e il primo parametro utente e' quello con indice 1 ...

Quindi ...



#include <stdio.h>

#define R 3
#define C 3

int matrix[R][C];

void crea(char *line[])
{
int r,c,i=1;
for(r=0;r<R;r++)
for(c=0;c<C;c++)
matrix[r][c]= atoi(line[i++]);
}

void stampa()
{
int c,r;
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
printf("%d\t",matrix[r][c]);
printf("\n");
}
}

main(int argc, char *argv[])
{
crea(argv);
stampa();
}

maurymg
31-01-2008, 16:30
Originariamente inviato da pallinopinco
Il tuo codice ne contiene molti. Ti sei chiesto a cosa serva argc? :)

Quale criterio vuoi adottare per inserire argc elementi in un vettore bidimensionale?

Esatto, hai detto bene, non so a cosa serve; L'ho usato perchè ho preso spunto da un programma nel libro..
Dopo che me lo hai fatto notare, ho pensato di togliero visto che mi sembrava che in questo programma non servisse.. Così facendo pero' non compilava neanche..
Mi puoi spiegare l'uso di argc?
Ti ringrazio in anticipo.

maurymg
31-01-2008, 16:33
Originariamente inviato da oregon
Guarda che argv[] non e' un vettore di puntatori ad interi, come hai scritto in

int *argv[]

ma e' un array di puntatori a stringhe

char *argv[]

e il primo parametro utente e' quello con indice 1 ...

Quindi ...



#include <stdio.h>

#define R 3
#define C 3

int matrix[R][C];

void crea(char *line[])
{
int r,c,i=1;
for(r=0;r<R;r++)
for(c=0;c<C;c++)
matrix[r][c]= atoi(line[i++]);
}

void stampa()
{
int c,r;
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
printf("%d\t",matrix[r][c]);
printf("\n");
}
}

main(int argc, char *argv[])
{
crea(argv);
stampa();
}


Perfetto con questa correzione funziona..
Ma mi sovviene un dubbio.. Non esiste quindi un vettore di puntatori ad interi?
Credo di no, altrimenti perchè avremmo usato un puntatore a caratteri per poi trasformare la stringa in intero? Giusto?

oregon
31-01-2008, 16:39
Originariamente inviato da maurymg
Perfetto con questa correzione funziona..

:)



Ma mi sovviene un dubbio.. Non esiste quindi un vettore di puntatori ad interi?

No ... nel senso che argv NON e' un vettore di puntatori ad interi ...



Credo di no, altrimenti perchè avremmo usato un puntatore a caratteri per poi trasformare la stringa in intero? Giusto?

Ovviamente ... ma non potrebbe essere cosi' dato che in input hai una sequenza di "stringhe alfanumeriche" ...

Mi sembra che tu stia procedendo "a tentoni" ... queste cose sono chiarissime in un qualsiasi libro di programmazione e stanno nei primi capitoli ... perche' non ne segui uno ...? (e non mi dire che lo stai facendo ...)

maurymg
31-01-2008, 16:47
.

maurymg
31-01-2008, 16:51
Originariamente inviato da oregon

Ovviamente ... ma non potrebbe essere cosi' dato che in input hai una sequenza di "stringhe alfanumeriche" ...


Ovvio non ci avevo pensato..
Io mi sto appoggiando ad un libro, ma per es. quando spiega l'argc dice:

Il primo argomento del main (chiamato per convezione argcm da argoment count) è il numero di argomenti presenti nella riga di comando;
Subito dopo c'è l'esempio di un programma..
Io ho quindi pensato di adoperare sull'es. del programma argv e argc, tali cose a un programma in cui potessi ripassare cio' che ho recentemente "imparato".


Ma da questa spiegazione come faccio ad es. a capire perchè è necessario l'uso di argc?
Perchè è necessario?

oregon
31-01-2008, 16:55
Non ho capito quasi nulla di quello che hai scritto ...

Comunque io parlavo di argv e non di argc.

argv e' il vettore di puntatori a stringhe (che sono le stringhe che passi al tuo programma sulla linea di avvio, escluso l'elemento argv[0] che e' il nome e il percorso dello stesso eseguibile ...);

argc, invece, e' un numero e rappresenta il numero di argomenti presenti nella linea di comando quando il programma e' stato avviato (ovvero, ti indica l'indice massimo da utilizzare nel vettore argv)

maurymg
31-01-2008, 17:17
Si, il discorso di argc era in risposta a pallinopinco..
Visto che nel mio programma non viene adoperato (almeno a quanto vedo io) perchè è necessario e non si puo' includere tra le parentesi del main soltanto argv?

Loading