Arresto prematuro

di Anonimizzato18590 il
9 risposte
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

  • Arrestarsi in che senso? va in crash?
  • Si crasha..
  • 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

    ....
  • Esattamente cosa intendi con nome del file in input che non uso?
  • L'hai scritto tu il primo parametro della funzione

    char *Ristoranti

    che dovrebbe essere il nome del file passato da linea di comando ...
  • Mi dispiace ma non ho capito cosa intendi,la linea di comando che dici tu è quella che richiama la funzione?
  • Scusa, ma l'hai scritto tu il codice ? tu chiami la funzione così

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

    Cosa vuol dire ?
  • 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?
  • 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