Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    7

    [C] nn esce dal ciclo

    ciao qualcuno potrebbe dirmi perchè quando arriva a stampare printf("il nome e%s\n",buffana->nome), continua a stamparlo all'infinito(nn si ferma più)e nn esce più dal ciclo..grazie
    PS:è una funzione ke lavora su 2 file e deve confrontare 2 campi
    codice:
    void stampadipend()
    {
         pfdip=fopen("dipendenti.txt","a");
         if(pfdip==NULL)
          printf("errore apertura file");
         else
         {
             while(feof(pfdip)==0)
             {
                         fread(buffdip,sizeof(struct dipend),1,pfdip);
                         pfana=fopen("anagrafe.txt","a");
                         if(pfana==NULL)
                          printf("errore apertura file");
                         else
                         {
                             fread(buffana,sizeof(struct anagr),1,pfana);
                             do
                             {
                                                         if(strcmp(buffdip->coddip,buffana->coddip)==0)
                                                         {
                                                          printf("il nome e%s\n",buffana->nome);
                                                          c=1;
                                                         } 
                                                         else
                                                         {
                                                              fread(buffana,sizeof(struct anagr),1,pfana);
                                                         }
                             }
                             while((feof(pfana)==0)||(c!=1));
                         }
                        fclose(pfana);
             }
            fclose(pfdip);
         }
    }

  2. #2

    Re: [C] nn esce dal ciclo

    Originariamente inviato da kekkino
    codice:
    void stampadipend()
    {
         pfdip=fopen("dipendenti.txt","a");
         if(pfdip==NULL)
          printf("errore apertura file");
         else
         {
             while(feof(pfdip)==0)
             {
                         fread(buffdip,sizeof(struct dipend),1,pfdip);
                         pfana=fopen("anagrafe.txt","a");
                         if(pfana==NULL)
                          printf("errore apertura file");
                         else
                         {
                             fread(buffana,sizeof(struct anagr),1,pfana);
                             do
                             {
                                                         if(strcmp(buffdip->coddip,buffana->coddip)==0)
                                                         {
                                                          printf("il nome e%s\n",buffana->nome);
                                                          c=1;
                                                         } 
                                                         else
                                                         {
                                                              fread(buffana,sizeof(struct anagr),1,pfana);
                                                         }
                             }
                             while((feof(pfana)==0)||(c!=1));
                         }
                        fclose(pfana);
             }
            fclose(pfdip);
         }
    }
    io nn vedo nessun incremento come hai scritto te il ciclo ripete quando è ==0 poi se vuoi fare in modo che termini questa condizione nn deve essere più vera quindi diverso da zero ma io nn vedo nessuna variabile incrementata (var=var+1 oppure var++)....spero che nn mi sbaglio

  3. #3

    Re: [C] nn esce dal ciclo

    codice:
    void stampadipend()
    {
         pfdip=fopen("dipendenti.txt","a");
         if(pfdip==NULL)
          printf("errore apertura file");
         else
         {
             while(feof(pfdip)==0)
             {
                         fread(buffdip,sizeof(struct dipend),1,pfdip);
                         pfana=fopen("anagrafe.txt","a");
                         if(pfana==NULL)
                          printf("errore apertura file");
                         else
                         {
                             fread(buffana,sizeof(struct anagr),1,pfana);
                             do
                             {
                                                         if(strcmp(buffdip->coddip,buffana->coddip)==0) 
                                                         {
                                                          printf("il nome e%s\n",buffana->nome);
                                                          c=1;
                                                         } 
                                                         else
                                                         {
                                                              fread(buffana,sizeof(struct anagr),1,pfana);
                                                         }
                             }
                             while((feof(pfana)==0)||(c!=1)); <----
                         }
                        fclose(pfana);
             }
            fclose(pfdip);
         }
    }
    è la condizione di uscita che è sbagliata probabilmente

  4. #4

    Re: Re: [C] nn esce dal ciclo

    Originariamente inviato da doraemon83
    codice:
    void stampadipend()
    {
         pfdip=fopen("dipendenti.txt","a");
         if(pfdip==NULL)
          printf("errore apertura file");
         else
         {
             while(feof(pfdip)==0)
             {
                         fread(buffdip,sizeof(struct dipend),1,pfdip);
                         pfana=fopen("anagrafe.txt","a");
                         if(pfana==NULL)
                          printf("errore apertura file");
                         else
                         {
                             fread(buffana,sizeof(struct anagr),1,pfana);
                             do
                             {
                                                         if(strcmp(buffdip->coddip,buffana->coddip)==0) 
                                                         {
                                                          printf("il nome e%s\n",buffana->nome);
                                                          c=1;
    <----------
                                                         } 
                                                         else
                                                         {
                                                              fread(buffana,sizeof(struct anagr),1,pfana);
                                                         }
                             }
                             while((feof(pfana)==0)||(c!=1));
                         }
                        fclose(pfana);
             }
            fclose(pfdip);
         }
    }
    Dove ho messo la freccia manca la lettura del campo successivo del file, per cui resta sempre sullo stesso non trovando mai la fine del file e ripetendo le stesse operazioni sullo stesso campo.
    in poke parole deve incrementare la feof(pfdip) in modo tale che nn sia più uguale a 0 ora nn so se sta formula è corretta ma dovresti fare così


    codice:
    while(feof(pfdip)==0)
             {
                         fread(buffdip,sizeof(struct dipend),1,pfdip);
                         pfana=fopen("anagrafe.txt","a");
                         if(pfana==NULL)
                          printf("errore apertura file");
                         else
                         {
                             fread(buffana,sizeof(struct anagr),1,pfana);
                             do
                             {
                                                         if(strcmp(buffdip->coddip,buffana->coddip)==0) 
                                                         {
                                                          printf("il nome e%s\n",buffana->nome);
                                                          c=1;
    <----------
                                                         } 
                                                         else
                                                         {
                                                              fread(buffana,sizeof(struct anagr),1,pfana);
                                                         }
                             }
                            feof(pfdip)++;

  5. #5
    Scusate probabilmente avevo capito male il codice... lui vuole che si esca dal ciclo quando si stampa il valore di buffana.
    In questo caso è sbagliata la condizione di uscita da do-while

    Prova due cose... ora non ho tempo per testare ma fai una alla volta queste modifiche e vedi se funziona
    1. per la condizione di uscita dal do-while metti && al posto di ||
    2. sostituisci c!=1 con c==1

  6. #6

    Re: [C] nn esce dal ciclo

    Originariamente inviato da kekkino
    ciao qualcuno potrebbe dirmi perchè quando arriva a stampare printf("il nome e%s\n",buffana->nome), continua a stamparlo all'infinito(nn si ferma più)e nn esce più dal ciclo..grazie
    PS:è una funzione ke lavora su 2 file e deve confrontare 2 campi
    ...
    Così sembra funzionare, prova anche tu :master:

    codice:
    void stampadipend()
    {
    
    	pfdip = fopen("dipendenti.txt", "rt");
    	if( pfdip )
    	{
    		while( ! feof(pfdip) )
    		{
    			fread(buffdip, sizeof(struct dipend), 1, pfdip);
    			pfana = fopen("anagrafe.txt", "rt");
    			if( pfana )
    			{
    				fread(buffana, sizeof(struct anagr), 1, pfana);
    				do
    				{
    					if(strcmp(buffdip->coddip, buffana->coddip) == 0)
    					{
    						printf("il nome e%s\n", buffana->nome);
    						c=1;
    					} 
    					else
    					{
    						fread(buffana, sizeof(struct anagr), 1, pfana);
    					}
    					getch();
    				}
    				while( !feof(pfana) && c!=1);
    				
    				fclose(pfana);
    			}
    			else
    				printf("ERRORE : Impossibile aprire il file \"anagrafe.txt\"\n");
    		}
    		fclose(pfdip);
    	}
    	else
    		printf("ERRORE : Impossibile aprire il file \"dipendenti.txt\"\n");
    		
    	return;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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