Ciao a tutti ragazzi, scusate per l'orario.
Volevo fare un programma che realizzasse la seguente:
si scriva un programma capace prendere in ingresso una matrice 30*30;
Tale matrice contiene in alcune righe il carrattere 'x'. Quando in una riga ci sono delle x queste devono essere di sguito.
Per capirci se la matrice fosse fatta di 6 colonne sarebbe ammessa qualcosa di questo tipo:
serxxx

mentre non sarebbe ammessa qualcosa del tipo:
xdxfx


Il programma deve essere in grado di stampare una matrice, in cui bisogna disporre in ogni riga, nella cella in cui c'era la prima x letta dal file in ingresso, la lettera O seguita dal numero di x che si susseguiranno in quella riga.

Io ho provato a fare questo programma ma viene fuori una matrice fatta tutta di "."
Io ho infatti creato una matrice di "." e poi sono andato a sostiturie nelle posizioni in cui si riscontravano le x, cio' che il programma richiedeva... evidentemente quindi non ci sono riuscito..

Ecco il sorgente:
codice:
#include <stdio.h>

void controllaO(char[], int );
void riempiOmatrice(char[][]);
int getline(char[], FILE *);
void stampamatrice(char[][]);
void riempimatrice(char[][]);
void inizializzaprom ();

int promemoriaO[30][3];
main(int argc, char *argv[])
{
         FILE *finO;
         finO=fopen(argv[1],"r");
         int len,r=0;
         char matrice [30][30];
         char line [100]; 
         inizializzaprom();
         while((len=getline(line,finO))>0)
             controllaO(line,r++);
        
         riempimatrice(matrice);
         riempiOmatrice(matrice);
         stampamatrice(matrice);
}

void controllaO (char line[], int r)
{
    int i,fine,iniz;
    for(i=0; line[i]!='\0'; i++)
    {
        if (line[i]=='x' && line[i-1]!='x')
            iniz=i;
        if (line[i]!='x' && line [i-1]=='x')
            fine=i;    
        }
    promemoriaO[r][0]=r;
    promemoriaO[r][1]=iniz;
    promemoriaO[r][2]=fine;
}            
        
void riempiOmatrice(char matrice[][30])
{
    int r;
    for(r=0; promemoriaO[r][0]>0; r++)
    {
             matrice[promemoriaO[r][0]][promemoriaO[r][1]]='O';
             matrice[promemoriaO[r][0]][promemoriaO[r][1]+ 1]=promemoriaO[r][2];
    }
}

void stampamatrice(char matrice[][30])
{
   int c,r;
   for(r=0;r<30;r++)
       {
           for(c=0;c<30;c++)
               printf("%c",matrice[r][c]);
       printf("\n");
       }
}
           
           
        
int getline(char s[], FILE *f) {
    int c, i;

    for (i=0; (c=getc(f)) != EOF && c != '\n'; i++)  
         s[i]=c;
    if (c=='\n') 
    {
       s[i]=c;
       ++i;
    }
    s[i]='\0';
    return i;

}

void riempimatrice(char matrice[][30])
{
     int r,c;
     for(r=0;r<30;r++)
         for(c=0;c<30;c++)
             matrice[r][c]='.';
}

void inizializzaprom()
{
     int r,c;
     for(r=0; r<30;r++)
         for(c=0; c<3;c++)
             promemoriaO[r][c]=-1;
}