Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Prendere stringhe di un certo intervallo di lettere

    Salve a tutti. L'esame di informatica è alle porte e stò esercitandomi su alcune prove d'esame. Devo leggere da file alcune stringhe e prendere solo quelle la cui prima lettera è compresa in un certo intervallo x y, dove x e y sono inserite dall'utente. Ho scritto così, ma sono sicuro che è una boiata, la stanchezza comincia a farsi sentire già a prima mattina..

    codice:
    #include <stdio.h>
    #define MAXP   10
    #define MAXL   30
    int main(){
        char file[10];
        char parole[MAXP][MAXL];
        char x, y;
        int i=0, j=0;
        FILE *f;
        printf("Inserisci il nome del file: ");
        gets(file);
        printf("Inserire i due estremi dell'intervallo di caratteri in base al quale selezionare le parole contenute nel file: ");
        scanf("%c%c", &x, &y);
        f=fopen(file, "r");
        for(i=0; i<MAXP; i++){
            while(parole[i][j]!='\0'){
                if(parole[i][j]>=x && parole[i][j]<=y){
                    fscanf(f, "%s", &parole[i]);
                }
            }
        }
        fclose(f);
    }
    L'idea era di leggere la prima stringa, verificare che il primo carattere fosse compreso nell'intervallo, e solo in caso positivo inserire la stringa nel vettore. Ma non mi esce fuori nulla di sensato..

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    prima devi leggere la "stringa" e poi valuti che il primo carattere sia nell'intervallo
    come fai tu prima controlli che sia nell'intervallo e poi la leggi


    codice:
    #include <stdio.h>
    #define MAXP   10
    #define MAXL   30
    int main(){
        char file[10];
        char parole[MAXP][MAXL];
        char x, y;
        int i=0, j=0;
        FILE *f;
        printf("Inserisci il nome del file: ");
        gets(file);
        printf("Inserire i due estremi dell'intervallo di caratteri in base al quale selezionare le parole contenute nel file: ");
        scanf("%c%c", &x, &y);
        f=fopen(file, "r");
        for(i=0; i<MAXP; i++){
            while(parole[i][j]!='\0'){
                if(parole[i][j]>=x && parole[i][j]<=y){ //qui fai un controllo ma devi ancora     leggere   il file
                    fscanf(f, "%s", &parole[i]);
                }
            }
        }
        fclose(f);
    }

    secondo me il file lo devi leggere comunque quindi un while e feof


    codice:
    #include <stdio.h>
    #define MAXP   10
    #define MAXL   30
    int main(){
        char file[10];
        char parole[MAXP][MAXL];
        char stringa[30];
        char x, y;
        int i=0, j=0;
        FILE *f;
        printf("Inserisci il nome del file: ");
        gets(file);
        printf("Inserire i due estremi dell'intervallo di caratteri in base al quale selezionare le parole contenute nel file: ");
        scanf("%c%c", &x, &y);
        f=fopen(file, "r");
       while(!feof(f))
       {
         
           fscanf(f, "%s", stringa);
           if(stringa[0]>=x && stringa[0]<=y){
                  strcpy(&parole[i],stringa);
                  i++;  
                }
    
          
         }
           fclose(f);
    }
    P.S.
    Posso aver commesso errori sulle matrici perchè non le uso !
    comunque leggi il file controlli che sia nell'intervallo e se è cosi le memorizzi nella matrice.
    credo che volevi fare una cosa del genere
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Anche col tuo suggerimento non riesco comunque a capire come fare..

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Premetto che sono un principiante , ho provato il programma e ho riscontrato
    un errore nell'aquisizione con scanf dei due caratteri di controllo per cui
    il confronto non poteva essere mai verificato e la matrice restava sempre
    "vuota " ho modificato un po
    e funziona anche se presenta un po di inesattezze ripete l'ultima parola trovata due volte
    e stampo anche i valori della matrice non inizializzati
    comunque provalo dovrebbe funzionare poi lo correggi e migliori

    codice:
    #include <stdio.h>
    #define MAXP   10
    #define MAXL   30
    int main(){
        char file[10];
        char parole[MAXP][MAXL];
        char stringa[30];
        char x, y;
        int i=0, j=0;
        FILE *f;
        printf("Inserisci il nome del file: ");
        gets(file);
        printf("Inserire i due estremi dell'intervallo di caratteri\n");
       //prima nor riusciva ad aquisire due caratteri con scanf
        printf("inserisci la prima lettera :  ");
        fflush(stdin);
        scanf("%c", &x);
        fflush(stdin);
        printf("inserisci la seconda lettera :  ");
        scanf("%c",&y);
        printf("%c %c \n",x,y);
        f=fopen(file, "r");
       while(!feof(f))
       {
         
           fscanf(f, "%s", stringa);
           if(stringa[0]>=x && stringa[0]<=y){    
               
                  strcpy(&parole[i],stringa);
                  i++;  
                }
           
    
          
         }
           fclose(f);
              for(j=0;j<9;j++)
                  printf("%s\n",&parole[j]);
           
          system("pause"); 
           
    }
    spero di essere stato di aiuto
    Tecnologia

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    A me crasha il programma che hai scritto. Ho capito dove sbagliavo, e grazie al tuo codice ho risolto. Però la stampa finale delle parole a me non va..

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    In quello che ha scritto torn :

    codice:
    for(j=0;j<9;j++)
                  printf("%s\n",&parole[j]);
    Dovrebbe invece essere:

    codice:
    for(j=0;j<i;j++)
                  printf("%s\n",&parole[j]);
    Perchè non è detto che vengano lette 9 stringhe dal file.

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.