Arresto prematuro

di il
9 risposte

Arresto prematuro

Ciao a tutti! stamattina mi sono dilettato in questo programma che cerca un elemento del file che risponde ai parametri e lo stampa,la compilazione va a buon fine ma appena lo lancio mi si arresta prematuramente,premetto che stampa il messaggio iniziale ,quindi presumo che l'errore sia nel main,questo è il codice,cosa ho sbagliato?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct ristorante{
       char nome[30];
       float x;
       float y;
       };
       
struct ristorante r;
  char nome_rist[30];
    float min_distanza=0;
       
       
       float distanza (struct ristorante r,float x, float y){
float d = (x-r.x)*(x-r.x)+(y-r.y)*(y-r.y);
return d;
}

void ristorantevicino(char *Ristoranti,float x,float y){
     printf("Apro il file: %s\n",Ristoranti);
     FILE *fp;
     fp=fopen("Ristoranti.txt","r");
     
     if (fp== NULL){
     printf("File error\n");
     }
     return;
     
     
while (fscanf(fp, "%s %f %f",r.nome,r.x,r.y)){
                  printf("%s %f :%f\n",r.nome,r.x,r.y);
                  float d=distanza(r,x,y);
                  printf("Distanza %f\n",d);
                  if(min_distanza == 0 || d<min_distanza){
                                 printf("NUova distanza minima %s\n",d);
                                 min_distanza=d;
                                 strcpy(nome_rist,r.nome);
                                 }
                                 }
                                 printf("Risto piu vicino:%s\n",nome_rist);
                                 }
                                 
                                 
                                 
                 int main(int argc,char *argv[]){
    
    FILE *fp;
    float x,y;
    
    printf("Inserisci le coordinate!\n");
    sscanf(argv[2],"%f %f ",&x, &y);
    ristorantevicino(argv[1], x, y);
    
    system("pause");
    return 0;
   
       
} 

9 Risposte

  • Re: Arresto prematuro

    Arrestarsi in che senso? va in crash?
  • Re: Arresto prematuro

    Si crasha..
  • Re: Arresto prematuro

    Ci sono un po' di inesattezze ... devi rivedere il codice con ATTENZIONE, riga per riga ...

    Attenzione all'input iniziale da argv ... devi usare due elementi non uno solo ... uno per x e uno per y
    Attenzione al nome di file in input da argv[1] che poi non utilizzi
    Attenzione agli input che richiedono il puntatore & alla variabile ...
    Attenzione ai return
    Attenzione all'output %s al posto di %d

    ....
  • Re: Arresto prematuro

    Esattamente cosa intendi con nome del file in input che non uso?
  • Re: Arresto prematuro

    L'hai scritto tu il primo parametro della funzione

    char *Ristoranti

    che dovrebbe essere il nome del file passato da linea di comando ...
  • Re: Arresto prematuro

    Mi dispiace ma non ho capito cosa intendi,la linea di comando che dici tu è quella che richiama la funzione?
  • Re: Arresto prematuro

    Scusa, ma l'hai scritto tu il codice ? tu chiami la funzione così

    ristorantevicino(argv[1], x, y);

    Cosa vuol dire ?
  • Re: Arresto prematuro

    Il codice non è mio,l'ho preso altrove,il problema è che cosi non funziona,con argv[1] identifico il parametro char *ristorante se non sbaglio,perciò quando la devo utilizzare,dove sbaglio?
  • Re: Arresto prematuro

    Non va bene utilizzare codice altrui senza comprenderlo.

    Anche perché o lo copi tutto senza modificarlo, o devi sapere cosa fai quando lo modifichi.

    Anche la sscanf iniziale è sbagliata dato che accetti due parametri dalla linea di comando.

    Qual era il codice originale? Hai apportato le altre correzioni che ti ho indicato? Posta il codice con le modifiche.
Devi accedere o registrarti per scrivere nel forum
9 risposte