a me è venuta in mente una roba del genere... 
legge il numero dei record presenti nel file txt
e alloca dinamicamente la memoria necessaria a contenere
tutti i record in una matrice bidimensionale matrix[righe == numero_record][colonne == valore_record]
(questo per non chiedere all'utente di inserire il numero dei record da leggere nel file)
Per l'estrazione casuale di due record ho usato rand() e Sleep()... p.s. il codice è commentato
codice:
#include <stdio.h> /* I/O standard */
#include <stdlib.h> /* system() malloc() free() */
#include <time.h> /* srand() rand() */
#include <windows.h> /* Windows API Sleep() */
int main()
{
FILE *pf; /* puntatore al file */
int TeamNum = 0; /* numero dei record presenti nel file (uno per ogni riga)*/
char **TeamNam; /* matrice che conterrà i record presenti nel file txt */
int i = 0, j = 0, SelectF = 0, SelectS = 0; /* altre variabili: SelectF == Select First, SelectS == Select Second */
/* PARTE PRIMA (catturo dinamicamente i records presenti nel file: senza chiedere nulla all'utente) */
if ( ! ( pf = fopen("file.txt","r")))
{
printf("Il file non può essere aperto");
system("pause");
return 1;
}
else
{
/* leggo il numero delle righe (ogni riga una stringa/record) */
while( 1 )
{
fread(&j, sizeof(char) , sizeof(char), pf);
if( feof(pf) ) break;
if( j == '\n') i++;
}
/* alloco dinamicamente la memoria per il numero delle righe trovate (=i) */
if( ! (TeamNam = (char **) malloc(i * sizeof(char *))) )
{
printf("Impossibile allocare la memoria\n");
system("pause");
return 1;
}
/* mi (ri)posiziono ad inizio file (primo byte) */
fseek(pf, 0, 0);
/* alloco la memoria per ogni colonna/record della riga (ogni record non deve superare i 50 caratteri) */
for( j = 0; j < i; j++)
{
if( ! (TeamNam[j] = (char *) malloc(50 * sizeof(char))) )
{
printf("Impossibile allocare la memoria\n");
system("pause");
return 1;
}
/* inserisco il record all'interno della colonna della matrice */
fgets(TeamNam[j], 50 , pf);
}
fclose(pf);
}
/* numero totale dei record trovati */
printf("totale squadre: %d\n\n", --i);
/* stampo a video tutti i record preseti nel file (caricati nella matrice) */
for( j = 0; j < i; j++ )
printf("%.2d - %s", j, TeamNam[j]);
/* PARTE SECONDA */
/* estraggo un numero random compreso tra 0 e il numero massimo delle righe/record trovati nel file txt */
srand(time(NULL));
SelectF = rand() % i;
/* aspetto 2 secondi */
Sleep(2000);
/* estraggo random anche il secondo numero (lo accetto solo se diverso dal primo) */
while ( 1 )
{
srand(time(NULL));
SelectS = rand() % i;
if( SelectS != SelectF ) break;
}
printf("\nMatch del giorno\n\n");
/* sfoglio la matrice e stampo a video il record/stringa corrispondente al primo numero estratto con random */
for( j = 0; j < i; j++ )
{
if( j == SelectF )
printf("%.2d - %s", j, TeamNam[j]);
}
/* sfoglio la matrice e stampo a video il record/stringa corrispondente al secondo numero estratto con random (ovviamente diverso dal primo) */
for( j = 0; j < i; j++ )
{
if( j == SelectS )
printf("%.2d - %s", j, TeamNam[j]);
}
/* libero la memoria allocata precedentemente per la matrice */
for( j = 0; j < i; j++ )
{
free(TeamNam[j]);
}
free(TeamNam);
printf("\n");
system("pause");
return 0;
}
il file .txt l'ho strutturato nel seguente modo:
codice:
0milan
1juventus
2inter
3udinese
4roma
5lazio
6parma
7sampdoria
8palermo
9messina
n.b. chi cerca delucidazioni sulle funzioni (rand() Sleep() etc etc) presenti in questo listato, faccia una ricerca utilizzando il motore del forum: se ne è ampiamente parlato