Crash del programma - C

di Anonimizzato27573 il
11 risposte
Ciao, sta volta mi sono bloccato in questo esercizio... vi spiego brevemente il problema, il programma compila ma appena si avvia ed inserisco il primo numero crasha istantaneamente.
il problema del crash deriva dalla riga "if(n%i==0)", ho notato che se inverto i con n ossia: if(i%n==0) il programma non crasha, solo che in sto caso mi da il risultato sbagliato...
sapreste dirmi come mai crasha dopo che digito il primo numero?

/*Scrivere un programma che chiede all’utente una sequenza di lunghezza indefinita di numeri positivi
terminata da un valore non positivo. Il programma conta per ciascun valore della sequenza tutti i
divisori propri (cioè diversi dal valore stesso) e salva nel file “risultati.txt” su ogni riga la coppia
valore letto e numero divisori propri trovati. Ad esempio: se l’utente inserisce la sequenza
1 5 4 3 2 8 9 -1
Il programma salverà nel file risultati.txt il seguente contenuto:
1 0
5 1
4 2
3 1
2 1
8 3
9 2
*/

#include <stdio.h>


int main(){
	
	FILE* fp;
	int temp;
	int n=0;
	int i;
	int conto=0;
	
	fp=fopen("risultati.txt", "w");
	
	if(fp==NULL){
		
		printf("errore nell'apertura del file");
		
	}else{
		
		do{			
		scanf("%d", &n);
		for(i=0; i<n; i++){
			if(n%i==0){
				conto++;
			}
			}
		
		fprintf(fp,"%d %d\n", n, conto);	
		}while(n>=1);

	}
	
	fclose(fp);

	return 0;
}

11 Risposte

  • Pensa bene a quali valori assumono n ed i
    Dovrebbe esserti chiaro il problema

    Ma tutto questo lo fai per studio?
  • N assume il valore che gli do io, invece i parte da 0 e prosegue fino ad n controllando per ogni numero se è un suo divisore...
    non è giusto?

    si lo faccio per studio, mi esercito facendo vecchi esercizi di testi degli anni passati
  • Hai provato con la calcolatrice a fare i conti?
    Caso per caso?


    Cosa studi?
  • Che devo controllare con la calcolatrice? n%i restituisce il resto della divisione... se il resto della divisione è 0 allora è un divisore e aumenta la variabile cont.
  • Fallo e scoprirai il perché

    Il tuo problema è che non fai: parli pensi, credi, ma non fai

    Fallo e vedrai...
  • ragazzo1223 ha scritto:


    i parte da 0
    E in questo caso cosa succede? Probabilmente credi di saperlo ma non lo sai veramente ...
  • Ahhhhh hai ragione, non può fare n%0 ecco perché crashava...
    infatti se faccio iniziare i da 1 il programma funziona alla perfezione
    #include <stdio.h>
    
    
    int main(){
    	
    	FILE* fp;
    	int temp;
    	int n=0;
    	int i;
    	int conto=0;
    	
    	fp=fopen("risultati.txt", "w");
    	
    	if(fp==NULL){
    		
    		printf("errore nell'apertura del file");
    		
    	}else{
    		
    		do{		
    		conto=0;
    		scanf("%d", &n);
    		for(i=1; i<n; i++){
    			if(n%i==0){
    				conto++;
    			}
    		}
    		
    		fprintf(fp,"%d %d\n", n, conto);	
    		}while(n>=1);
    
    	}
    	
    	fclose(fp);
    
    	return 0;
    }
  • Infatti ... è una sola parola ...
  • "In fatti" le cose sono differenti che "in parole"


    Scusate il gioco di parole

    Ma serve per dire che se non si fanno i fatti, le parole fanno danni
  • Si giusto... infatti è una sola parola, a quest'ora sono fuso

    Standard senza di te probabilmente sarei rimasto giorni a pensare inutilmente al problema, so di avere quel difetto di cui parli, mi impegnerò a risolverlo grazie mille
  • Grazie a te

    Ho un nipote come te, ecco perché mi scaldo...
Devi accedere o registrarti per scrivere nel forum
11 risposte