Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260

    [C] Cancella la riga ma ricopia l'ultima due volte

    Salve a tutti, questo è il codice:

    int cancella(){
    FILE*f;
    FILE*s;
    char nome[15], cognome[15], cognomeM[15], nomeM[15], telefonoM[11];
    printf("INSERISCI COGNOME: ");
    scanf("%s",cognome);
    printf("INSERISCI NOME: ");
    scanf("%s",nome);
    f=fopen("rubrica.txt","r");
    s=fopen("temp.txt","a");
    while(!feof(f)){
    fscanf(f,"%s",cognomeM);
    fscanf(f,"%s",nomeM);
    fscanf(f,"%s",telefonoM);
    if((strcmp(cognomeM,cognome)==0)&(strcmp(nomeM,nom e)==0))
    printf("Contatto cancellato!");

    else{
    fprintf(s,"%s %s %s\n",cognomeM,nomeM,telefonoM);
    }
    }
    fclose(f);
    fclose(s);
    remove("C:\\....\\rubrica.txt");
    rename("C:\\....\\temp.txt","C:\\....\\rubrica.txt ");
    return 0;
    }

    Praticamente se cancello l'ultima riga mi riporta la printf Contatto cancellato! tante volte quante sono le righe sopra quella cancellata.
    Se invece invece cancello una delle righe dalla prima alla penultima mi ricopia l'ultima due volte!
    Sto uscendo pazzo a capire qual'è il problema.
    Sapreste aiutarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Almeno vi sembra giusto il codice???

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    && al posto di &
    Mi sembra l'unico errore, poi ho letto velocemente...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Così facendo mi parte un ciclo infinito!
    Secondo me credo sia un problema di quel controllo nel while. Però non so proprio con che cosa cambiarlo!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    20
    la butto lì: aldilà della sostituzione &->&& (già fatta notare), non andare a capo dopo l'ultimo contatto nel file rubrica.txt.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    non andare a capo dopo l'ultimo contatto nel file rubrica.txt
    Prvata anche questa ipotesi ma il file rubrica termina esattamente con l'ultimo numero di telefono dell'ultima riga.
    Secondo me il problema riesiede in quell'feof(f) all'interno del while. Però mannaggia a me che non conosco troppo bene l'inglese altrimenti me lo andavo a vedere nel manuale per benino, cercando di capire cosa fa precisamente quell'feof!!!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova a scrivere così la parte del ciclo

    codice:
    	fscanf(f,"%s",cognomeM);
    	fscanf(f,"%s",nomeM);
    	fscanf(f,"%s",telefonoM);
    	while(!feof(f))
    	{ 
    		if((strcmp(cognomeM,cognome)==0)&(strcmp(nomeM,nome)==0))
    			printf("Contatto cancellato!");
    		else
    			fprintf(s,"%s %s %s\n",cognomeM,nomeM,telefonoM);
    		
    		fscanf(f,"%s",cognomeM);
    		fscanf(f,"%s",nomeM);
    		fscanf(f,"%s",telefonoM);
    	}
    P.S. Utilizza i tag CODE quando mostri del codice !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Ho risolto il problema, in modo un po' grezzo ma l'ho risolto. Ora provo anche il modo in cui hai scritto tu. Ora ti posto il modo in cui ho risolto.

    codice:
         int cancella(){
         FILE*f;
         FILE*s;
         char nome[15], cognome[15], cognomeM[15], nomeM[15], telefonoM[11], riga[50];
         printf("INSERISCI COGNOME: ");
         scanf("%s",cognome);
         printf("INSERISCI NOME: ");
         scanf("%s",nome);
         f=fopen("rubrica.txt","r");
         s=fopen("temp.txt","a");
         while(!feof(f)){           
              if(fscanf(f,"%s%s%s",cognomeM,nomeM,telefonoM)==3){
             	 if((strcmp(cognomeM,cognome)==0)&(strcmp(nomeM,nome)==0))
             		printf("\n\nContatto cancellato!");          
             	 else   
                 	 fprintf(s,"%s %s %s\n",cognomeM,nomeM,telefonoM);
        	 }
         }
         fclose(f);
         fclose(s);
         remove("rubrica.txt");
         rename("temp.txt","rubrica.txt");
         return 0;
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Ho provato il tuo metodo ma mi fa la printf di alcuni cratteri strani al posto del contatto cancellato. L'importante è che ho risolto, grazie mille a tutti per l'aiuto e il tempo perso dietro a me!
    Alla prossima (che sicuramente ci sarà finchè non finisco questo progetto)!!!

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