Domanda problema aiuto c

A parte il fatto che dovresti usare un titolo adeguato al thread e non quello che hai scritto, è ovvio che hai problemi con quel codice.

Non sai che un file di testo viene letto sequenzialmente dall'inizio fino alla fine? Credi che la fscanf ricominci a leggere dall'inizio del file da sola?
E poi, il ciclo continua anche oltre la fine del file se non trova corrispondenze, cosa che invece devi controllare.

Quindi, per correggere ...

- la ricerca va fatta "fino alla fine del file e non oltre" ... e devi accorgerti che è arrivata la fine del file senza che sia stato trovato il nominativo ...
- prima dell'inizio di una nuova ricerca devi usare una rewind(fp) per riportare il puntatore del file all'inizio
 
  • Mi piace
Reazioni: Dazorn

ZioEdo

Utente Bronze
4 Giugno 2020
21
11
1
24
Ultima modifica:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>




main(){

    FILE *fp;
    char c[20];
    char query[20];
    int i = 0;
    struct Persona{
            char nome[20];
            char indirizzo[30];
            char numero[15];
                  } pers;

    fp = fopen("prova.txt", "rt");
    if(fp == NULL){
            printf("errore nell apertura del file"); exit(1);
                    }
    else
    {  
        while(1)
        {   printf("che utente vuoi cercare? ");
            scanf("%s", query);
            do{
                fscanf(fp," %s %s %s",&pers.nome, &pers.indirizzo, &pers.numero);
            }while(strcmp(pers.nome, query) != 0);
           
            printf("nome: %s, indirizzo: %s, numero: %s\n", pers.nome, pers.indirizzo, pers.numero);
           
        }
    }

        if(fclose(fp) == 0)
            printf("chiusua terminata con successo");
   
       
    }
ragazzi aiuto! il codice in questione manda in output nome, indirizzo e numero dell' utente cercato in una lista situata in prova.txt
fatta cosi:
LUCA Via_dello_zero 355547739825
EDOARDO Via_Rio_Veno 885776366386
ANTONIO Via_America 444477356393
VALERIO Via_Antartide 747764663889
il codice inizialmente funziona come deve ma dopo alcune richieste smette di funzionare. Non capisco da cosa dipenda , se qualcuno più esperto riuscisse a darmi una mano gliene sarei grato.
 
ok grazie mille per i consigli, genilissimo
A parte il fatto che dovresti usare un titolo adeguato al thread e non quello che hai scritto, è ovvio che hai problemi con quel codice.

Non sai che un file di testo viene letto sequenzialmente dall'inizio fino alla fine? Credi che la fscanf ricominci a leggere dall'inizio del file da sola?
E poi, il ciclo continua anche oltre la fine del file se non trova corrispondenze, cosa che invece devi controllare.

Quindi, per correggere ...

- la ricerca va fatta "fino alla fine del file e non oltre" ... e devi accorgerti che è arrivata la fine del file senza che sia stato trovato il nominativo ...
- prima dell'inizio di una nuova ricerca devi usare una rewind(fp) per riportare il puntatore del file all'inizio
okok perfetto, grazie mille per i consigli