Problema puntatori e array

di il
4 risposte

Problema puntatori e array

Salve a tutti vi espongo il mio problema: io devo, dopo aver preso da riga di comando i dati necessari, eseguire delle operzioni.

io ho scritto
void main(int argc, char *argv[])
{
}

allora argc dovrebbe dirmi quanti input ha ricevuto giusto? bene supponiamo che io abbia inserito da riga di comando una cosa del genere
prova.exe 100 -s12
con -s : comando che mi dovrebbe ad esempio calcolare la media e 12 che mi dice di cosa fare la media...
tutto questo sproloquio per chiedere : come faccio a dire al computer di controllare se c'è -s e poi di controllare i numeri dopo? grazie mille... ah i numeri possono essere un numero compreso tra 1 e 5... spero di essermi spiegato bene anche se ne dubito...

4 Risposte

  • Re: Problema puntatori e array

    Ciao,

    Senza scomodare altre cose può essere sufficiente uno pseudocodice di questo genere:
    for(int i=1;i<argc;i++) //NB: In argv[0] c'è sempre il nome del programma
    {
       char *tmp=argv[i]
       ..se i primi due caratteri di tmp sono uguali a -s
          ..controlla il resto di tmp (a partire da tmp+2)
       ..altrimenti
          ..controlla altre opzioni
    }
    Per il controllo dei primi due caratteri ed il parsing delle cifre che seguono il parametro potresti scrivere due funzioncine appropriate...

    PS: Per convertire una stringa contenente solo cifre in un numerico (int) puoi usare la funzione atoi(), per ottenere un float atof()...

    Ciaociao
  • Re: Problema puntatori e array

    Come posso controllare il resto di tmp senza contare i primi due convertirli in un int?
  • Re: Problema puntatori e array

    Ciao,

    Se char *tmp punta a \"-s200\\0\" tmp+2 punterà a \"200\\0\"... puoi usarlo direttamente nella atoi senza problemi...

    Ciaociao
  • Re: Problema puntatori e array

    
    char del[]=\"-e\";
    if (argv[2][0]=='-' && argv[2][1]=='e')
    {
    p=strtok(argv[2],del);
    num=atoi(p);
    io ho risolto così e pare funzionare però se ho come primo numero uno 0 non funziona...

    ora però ho un altro problema:


    in pratica ho un file con una struttura tipo
    giorno gara finale
    e devo realizzare una funzione che compari tutte le stringhe gara e veda qual'è la meno frequente, come posso fare? devo memorizzare ogni nuova gara in un array di stringhe e usare un contatore?
    tipo
    while(gets(buf) != NULL)
    {
    sscanf(\"%d %s %d\",&giorno,gara,&finale);
    for(a=10,a<27,a++)
    {
    	if(giorno==a)
    		{
    		for (b=0,b<200,b++)
                    {
                     if (strcmp(gara,listagare[b])==0)
                           {
                            contatoregara++;
                            }
                     else 
                           {
                            */copia gara in listagare[b] (come si fa?)*/
                            }
    		}
    }
    e dopo controllo il contatore più basso? si fa così? c'è un modo meno dispersivo?
Devi accedere o registrarti per scrivere nel forum
4 risposte