Salva, ho creato il codice di un programma che in base alla scelta dell'utente, prende strade diverse. Nessun problema se non fosse per la 4 che chiede di convertire l'iniziale di tutte le stringhe. Il codice che ho scritto funziona parzialmente (mi riferisco al case 4) infatti ad esempio su tre stringhe mi effettua la conversione ma "ignora quella centrale" e soprattutto non le inserisce nel file convertite. Vi allego il codice:
/* Scrivere un programma che consenta, a scelta dell'utente, di:
1) Creare un file contenente un testo di 20 righe;
2) Stampare il file;
3) Contare il numero di occorrenze del carattere 'e' per ciascuna riga e in totale;
4) Sostituire il primo carattere di ogni riga con il corrispondente maiuscolo. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int main (void)
{
FILE *puntaFile;
char buffer [MAX+1];
char nome [MAX+1];
int scelta,i,l;
int tot=0,tot2=0,c=0;
char carattere;
printf ("Inserire '1' per creare un file contenente un testo di 20 righe");
printf ("\nInserire '2' per stampare il file");
printf ("\nInserire '3' per contare il numero di occorrenze del carattere 'e' per ciascuna riga e in totale");
printf ("\nInserire '4' per sostituire il primo carattere di ogni riga con il corrispondente maiuscolo");
printf("\n\nInserisci la scelta: ");
scanf("%d",&scelta);
switch (scelta)
{
case 1:
printf ("\nInserisci il nome del file da creare: ");
fflush(stdin);
gets(nome);
if((puntaFile=fopen(nome,"w"))==NULL)
{
printf("Erroe nell'apertura del programma.");
exit;
}
for(i=0;i<20;i++)
{
printf("\nInserisci la riga %d: ",i+1);
gets(buffer);
fputs(buffer,puntaFile);
fputc((int)'\n',puntaFile);
}
fclose(puntaFile);
break;
case 2:
printf("\nInserisci il nome del file da stampare: ");
fflush(stdin);
gets(nome);
if ((puntaFile=fopen(nome,"r"))==NULL)
{
printf("\nErrore nell\'apertura del file.");
exit;
}
while (fgets(buffer,MAX,puntaFile)!=NULL)
printf ("%s",buffer);
fclose (puntaFile);
break;
case 3:
printf("\nInserisci il nome del file: ");
fflush(stdin);
gets(nome);
if((puntaFile=fopen(nome,"r"))==NULL)
{
printf ("\nIl file non puo\' essere aperto.");
exit;
}
while(fgets(buffer,MAX,puntaFile)!=NULL)
{
l=strlen(buffer)-1;
for(i=0;i<l;i++)
{
if (buffer[i]=='e')
{
tot++;
tot2++;
}
}
c++;
printf("\nNella stringa %d ci sono %d 'e'.",c,tot);
tot=0;
}
printf("\nIn tutto il file ci sono %d 'e'.",tot2);
fclose(puntaFile);
break;
case 4:
printf("\nInserisci il nome del file: ");
fflush(stdin);
gets(nome);
if((puntaFile=fopen(nome,"r+"))==NULL)
{
printf("\nIl file non puo\' essere aperto.");
exit;
}
while(fgets(buffer,MAX,puntaFile)!=NULL)
{
buffer[0]=toupper(buffer[0]);
fprintf(puntaFile,"%s",buffer);
printf("%s",buffer);
}
break;
default:
printf("\nL'utente non ha inserito alcuna scelta.");
break;
}
}