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

    [C] scanf senza conoscere il numero di parametri..

    Devo ricevere da tastiera dei parametri... ma possono essere n!!! C'e' un modo di utilizzare la scanf?? Devo utilizzare per forza la fgets??

    Devo ricevere i dati nel seguente formato:

    p = 1 2 3 ; 4 5 6 ;

    p e' il nome di una matrice contenente due righe, una formata dai numeri 1 2 3 e un'altra formata da 4 5 6 .
    Ovviamente la lunghezza delle righe e delle colonne non deve essere un numero preciso.. ed e' questo che mi sta creando problemi!! Perche' non posso usare la scanf! E con la fgets mi sta fumando il cervello per tutti i casi possibili per cui non potrebbe andare bene... (ad esempio se scrivo p = 1 2 3 ; ; 4 5 6 ; )
    A complicare il tutto c'e' anche il fatto che la matrice puo' contenere double!!! :master:
    Grazie..
    Silvia C.

  2. #2
    vorrei aiutarti ma nn riesco a capire bene il problema!! perkè usi la fgets? stai usando dei file? fammi capire meglio..vorrei aiutarti...

  3. #3
    Originariamente inviato da dom3nico_3L1
    vorrei aiutarti ma nn riesco a capire bene il problema!! perkè usi la fgets? stai usando dei file? fammi capire meglio..vorrei aiutarti...
    No, faccio la fgets su stdin... per prendere i parametri di input! Praticamente faccio una shell cosi':

    -$ Welcome!!
    -$ inserisco comando per creare la matrice

    il problema e' che devo prendere dei parametri di input e devono essere nel formato sopra descritto.. cioe' ad esempio se volessi soltanto 2 numeri per righe con 2 righe sarebbe facile perche' farei:

    scanf("%s = %d %d ; %d %d ;" , &buf, &a, &b, &c, &d);

    dove buf e' un char [] e a,b,c,d sono int. Questo pero' lo posso fare perche' SO che devo ricevere 4 interi piu' una stringa... se non ho il numero preciso di interi che ricevo come faccio?? Esiste un comando simile che si puo' utilizzare come la scanf e che vale anche in questo caso??
    Al che ho pensato di utilizzare:

    fgets(buf,MAXDIM,stdin)

    prendo cioe' la riga intera "p = 1 2 3 ; 4 5 6 ;".
    A questo punto pero' devo controllare ad esempio che buf[2], buf[3], buf[4], buf[6],buf[7],buf[8] siano interi, e che buf[1] sia un "=" ecc... e cio' mi crea problemi perche' sono tanti controlli che se ci fosse una fz simile alla scanf non avrei...
    volevo sapere se c'era un funzione che magari non conosco o c'e' qualche cosa che mi sfugge e che potrei fare per evitarmi tutti quei controlli...
    Silvia C.

  4. #4
    ascolta nn so se è quello ke volevi ma è una probabile risposta alla richiesta che tu hai fatto....questo è il codice...vedi se può andarti bene...io lo spero

    # include <stdio.h>
    # include <conio.h>

    #define maxdim 100

    struct buffer
    {
    char nome[20];
    int val[maxdim];
    } buf;

    void main()
    {
    int n;
    clrscr();
    printf("Inserire il numero di valori\n");
    scanf("%d",&n);
    printf("\nInserire il nome\n");
    fflush(stdin);
    gets(buf.nome);
    for(int i=0;i<n;i++)
    {
    scanf("%d",&buf.val[i]);
    }

    //verifica del funzionamento

    printf("%s =",buf.nome);
    for(i=0;i<n;i++)
    printf(" %d",buf.val[i]);
    getch();
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.