Ciao,
dunque ho questo esercizio da fare:
Un file di testo contiene la descrizione di un sistema relativo a una schedina del gioco del totocalcio. Il
file è composto da N righe, in ognuna delle quali si possono trovare uno, due oppure tutti e tre i simboli
per i possibili risultati (che sono 1, 2 e X).
Si scriva un programma C che, acquisito il contenuto del file in un’opportuna struttura dati interna,
generi tutte le colonne della schedina appartenenti al sistema letto, espandendo tutte le coppie e le triple
di simboli e generando tutte le possibili combinazioni. Tali combinazioni siano, quindi, memorizzate in
un secondo file, in ragione di una per riga.
Si noti che il valore di N non è noto a priori, né esso compare in alcun modo nel file di ingresso: tale
valore deve essere opportunamente dedotto dal programma a partire dal contenuto del file stesso.
E questo è il mio codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
void calcio(int i, int vet[], char *s[4], int n);
int main(void)
{
int i=0, n;
int vet[MAX]={0};
char tmp[4];
char c;
char **s;
FILE *f;
f=fopen("calcio.txt", "r");
while(fscanf(f, "%s", tmp)!=EOF)
i++;
rewind(f);
s=malloc(i*sizeof(char *));
for(n=0; n<i; n++)
s[n]=malloc(4*sizeof(char));
n=0;
while(fscanf(f, "%s", s[n])==1)
n++;
calcio(0, vet, s, i);
return 1;
}
void calcio(int i, int vet[], char *s[4], int n) {
int j;
if(i>=n) {
for(j=0; j<n; j++)
printf(" %c ", s[j][vet[j]]);
printf("\n");
return;
}
if(s[i][0]!='\0') {
vet[i]=0;
calcio(i+1, vet, s, n);
}
if(s[i][1]!='\0') {
vet[i]=1;
calcio(i+1, vet, s, n);
}
if(s[i][2]!='\0') {
vet[i]=2;
calcio(i+1, vet, s, n);
}
}
Il problema consiste nel fatto che se provate a eseguirlo con dei dati di prova (ad esempio:
1
12
1X
X
2
1X2
Vengono generate molte più combinazioni di quelle possibili, e in quelle di troppo uno o più valori assumono valore casuale (quindi non 1 2 o x).
Quindi credo che devo aggiungere altre condizioni per far proseguire la ricorsione, ma non capisco quali, avendo già messo che non si può procedere se si sono già elaborati tutti i caratteri di una della stringa in input.