Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 34

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ma quale crash?

    1) fornisci sempre il codice che usi, se lo hai modificato
    2) facci vedere il contenuto del file di testo che hai provato
    3) mostra il messaggio del crash

    OVVIAMENTE, dato che conti le linee, ci va un solo numero per linea ...

    Si può sapere come è fatto questo file di 5000x5000 ... ???
    Ultima modifica di oregon; 14-05-2015 a 20:16
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    codice:
    1)ecco il codice che uso
    
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    
    
    
    
    #define FILE_NAME "testo.txt"
    
    
    
    
    
    
    
    
    int countlines(char *file)
    {
    FILE *fl;
    char ch;
    int count=0;
    if(!(fl=fopen(file,"r")))
        return -1;
    while((fscanf(fl,"%c",&ch))>0)
        if(ch=='\n')
        count ++;
    return count;
    fclose(fl);
    }
    void main()
    {
    FILE *fp;
    int i=0;
    int ctl;
    int *x;
    int *y;
    fp=fopen(FILE_NAME,"r");
    ctl=countlines(FILE_NAME);
    x=(int*)malloc(ctl*sizeof(int));
    y=(int*)malloc(ctl*sizeof(int));
    while((fscanf(fp,"%d",&x[i]))>0)
        {
            printf("%d",x[i]);
        i++;
        }
    }
    
    2)ecco il testo (una parte ):matrice.GIF
    
    3)crash.jpg   il numero anomalo .

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sbagliavi a leggere la matrice: come fai a leggere tutta una matrice (bidimensionale) e metterla in un vettore (monodimensionale)? Inoltre dovresti imparare a leggere i warning del compilatore: con il tuo codice mi diceva che 'y' era inutilizzata. La cosa dovrebbe insospettirti.

    Così dovrebbe funzionare correttamente:

    codice:
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    
    #define FILE_NAME "testo.txt"
    
    int countlines(char *file)
    {
         FILE *fl;
         char ch;
         int count=0;
         if(!(fl=fopen(file,"r")))
              return -1;
         while((fscanf(fl,"%c",&ch))>0)
              if(ch=='\n')
                   count ++;
         return count;
         fclose(fl);
    }
    
    
    int main()
    {
         FILE *fp;
         int i=0;
         int ctl;
         //int *x;
         //int *y;
         int** matrice;
         fp=fopen(FILE_NAME,"r");
         ctl=countlines(FILE_NAME);
         matrice = malloc(ctl * sizeof(int*));
         for(i = 0; i < ctl; ++i) {
             matrice[i] = malloc(ctl * sizeof(int));
         }
         //x=(int*)malloc(ctl*sizeof(int));
         //y=(int*)malloc(ctl*sizeof(int));
         int j;
         i=0; j=0;
         while((fscanf(fp,"%d",&matrice[i][j]))>0) {
              printf("%d ",matrice[i][j]);
              j++;
              if(j == ctl) {
                  j = 0;
                  i++;
                  printf("\n");
              }
         }
    
         return 0;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    minomic , purtroppo il tuo codice mi da un matrice 2*2 poi mi crasha brutalemente

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da paulucc Visualizza il messaggio
    minomic , purtroppo il tuo codice mi da un matrice 2*2 poi mi crasha brutalemente

    Quel codice, che avresti dovuto provare a scrivere tu perché qui la pappa pronta è vietata, almeno dovresti cercare ii studiarlo e capirlo. Ovviamente se lo copi incolli senza comprenderlo avrai problemi. Se utilizzi tanti numeri in orizzontale quante linee nel file avrai una matrice quadrata e il programma funzionerà. Se nel file di testo hai piú numeri che linee, sarà una matrice rettangolare e avrai il crash.
    Ultima modifica di oregon; 15-05-2015 a 07:35
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    bene, ho provato con l'allocazione dinamica ed ho risolto ecco i risultati:
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    
    int main()
    {
      int i;
      int j;
    
    
    /*matrix*/
    
    
    
    double** mat=malloc(3*sizeof(double*));
    for(i=0;i<3;++i)
    mat[i]=malloc(3*sizeof(double));
    
    
    
    
      FILE *file;
      file=fopen("pollino.txt", "r");
    
    
     for(i = 0; i < 3; i++)
      {
          for(j = 0; j < 3; j++)
          {
      
           if (!fscanf(file, "%d", &mat[i][j]))
               break;
          // mat[i][j] -= '0';
           printf("%d\n",mat[i][j]); 
          }
    
    
      }
      fclose(file);
    }

    prompt: prompt.jpg


    testo: lol.jpg

    mi escono tutti in un unica colona, come devo fare per stamparla così come l'ho scritta?
    Ultima modifica di paulucc; 15-05-2015 a 17:30

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Allora c'è un problema nel tuo file dati, perché io l'ho provato con un file che contiene una matrice 4x4 e funziona correttamente.

    Come diceva oregon, dovresti proprio postare il file. O almeno ricontrollalo perché molto probabilmente l'errore è lì.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Che vuoi dire? Anche prima usavi l'allocazione dinamica solo che ora leggi 3x3 elementi in maniera fissa ... che non è quello che volevi fare all'inizio.

    Per la visualizzazione, hai scritto tu \n per andare a capo ... o no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    27
    si hai ragione , ho provato a generalizzare :
    codice:
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    
    
    int countlines(char *file)
    {
    FILE *fl;
    char ch;
    int count=0;
    while((fscanf(fl,"%c",&ch))>0)
        if(ch=='\n')
        count ++;
    return count;
    fclose(fl);
    }
    
    
    
    
    
    
    
    
    int main()
    {
      int i;
      int j;
     int ctl=countlines("pollino.txt");
    
    
    
    
    double** mat=malloc(ctl*sizeof(int*));
    for(i=0;i<ctl;++i)
    mat[i]=malloc(ctl*sizeof(int));
    
    
    
    
      FILE *file;
      file=fopen("pollino.txt", "r");
    
    
     for(i = 0; i < ctl; i++)
      {
          for(j = 0; j < ctl; j++)
          {
    
    
           if (!fscanf(file, "%lf", &mat[i][j]))
               break;
    
    
           printf("%lf\n",mat[i][j]);
          }
    
    
      }
      fclose(file);
    }
    Ma non mi parte neanche , cioè crasha all'istante.

  10. #10
    Faccio notare che la fclose() non verrà mai eseguita se la metti dopo il return
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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