Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    passaggio stringa da linea di comando [C]

    Si realizzi un programma strutturato in linguaggio C che permetta di gestire le statistiche di una
    partita di calcio. Le informazioni sono contenute in un file il cui nome viene passato da linea di
    comando. Tale file contiene, uno per riga e separati da spazi: nome e cognome del giocatore, ruolo, chilometri percorsi, passaggi completati, tiri effettuati, goal fatti, falli fatti e falli subiti.



    Il programma può ricevere da linea di comando uno dei seguenti parametri:
    1. il flag "-a" e una stringa di caratteri che indica il cognome di un giocatore; in questo caso, il programma deve restituire a video tutte le statistiche
    relative al giocatore specificato.
    2. il flag “-b” e una stringa di caratteri che indica un ruolo; in questo caso, il programma deve
    restituire le statistiche di tutti i calciatori che giocano in quel ruolo.



    Ho fatto il programma senza utilizzare la linea di comando e funziona, ma non riesco usando la linea di comando!

    Ho messo nello switch case argv[2] ma mi da errore e non riesco a capire cosa ci dovrei mettere per passare una stringa dalla linea di comando!

    il mio programma è:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char*argv[])
    {
        int passaggi,tiri,goal,fal_fat,fal_sub,variabile;
        float Km;
        char nome[31],cognome[31],ruolo[15],s[93];
    
    FILE*ff;
    ff=fopen("calcio.txt","r");
    if(ff==NULL){
        printf("errore apertura file");
        exit(-1);
    }
    
    
    
    
    
    
    
    
    
    
     while(fgets(s,92,ff)!=NULL){
            sscanf(s,"%s %s %s %f %d %d %d %d %d",nome,cognome,ruolo,&Km,&passaggi,&tiri,&goal,&fal_fat,&fal_sub);
    
    
    
    switch(argv[2]){
    
    case '-a':
    
    
    
        if(strcmp(cognome,argv[3])==0){
            printf("%s %s %s %f %d %d %d %d %d\n",nome,cognome,ruolo,Km,passaggi,tiri,goal,fal_fat,fal_sub);
        }
    break;
    
    case '-b':
    
    
        if(strcmp(argv[3],ruolo)==0){
            printf("%s %s %f %d %d %d %d %d\n",nome,cognome,Km,passaggi,tiri,goal,fal_fat,fal_sub);
        }
        break;
        }}
    
    
        return 0;
    }

  2. #2
    Lo switch supporta solo tipi interi di conseguenza le stringhe non vanno bene( i singoli caratteri invece sì perché vengono convertiti nel rispettivo codice ASCII).

    Per confrontare array di char devi usare strcmp.

  3. #3
    Beh o utilizzi strcmp(), visto che da linea di comando passi comunque delle stringhe, oppure puoi fare in questo modo...
    Come esempio, eccoti questo.. Praticamente devi passare 3 argomenti da riga di comando, 2 numeri e un carattere.. se è a stampa la somma e così via...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main( int argc, char *argv[] )
    {
    int r;
    int val1;
    int val2;
    char ch;
    if(argc!=4)
            {
        	printf("Errore, numero parametri errato\n");
        	exit(1);
        	}
    r=sscanf(argv[1],"%d",&val1 );
    if (r!=1)
        	{
        	printf("Errore: primo parametro non valido\n");
        	exit(1);
        	}
    r=sscanf(argv[2],"%d",&val2 );
    if (r!=1)
        	{
        	printf("Errore: secondo parametro non valido\n");
        	exit(1);
            }
    r=sscanf(argv[3],"%c",&ch);
    if(r!=1)
            {
            printf("Errore: terzo parametro non valido\n");
            exit(1);
            }
    switch(ch)
            {
            case 'a':
                    printf("Hai scelto la somma: %d\n",val1+val2);
                    break;
            case 'b':
                    printf("Hai scelto la sottrazione: %d\n",val1-val2);
                    break;
            case 'c':
                    printf("Hai scelto la moltiplicazione: %d\n",val1*val2);
                    break;
            case 'd':
                    if(val2!=0)
                            printf("Hai scelto la divisione: %d\n",val1/val2);
                    else
                            printf("Errore, impossibile dividere per zero:\n");
                    break;
            default:
                    printf("Errore, terzo parametro non valido!\n");
    	}
    
    return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.