SCANF() NON SI FERMA

di il
8 risposte

SCANF() NON SI FERMA

Salve, ho un problema con questo programma in C, premetto che sono un neofita alle prime armi quindi mi scuso in anticipo in caso di errori/orrori banali.
Stavo progettando un algoritmo di Insertion Sort e il problema principale è che se in input ad n do un valore minore di 6 il programma funziona bene, mentre se decido di inserire più di 6, me ne fa inserire più di quelli scelti nonostante nel primo for abbia messo come limite <=n. Vi ringrazio in anticipo.
#include <stdio.h>
#include <stdlib.h>

 void insertion_sort(int n,int A[]);	 
 
int main() {
	int n;
	int A[n];
	
	printf("\nQuanti elementi vuoi inserire ?\t");
	scanf(" %d",&n);
	
	for(int t=1;t<=n;t++) {
		printf("\n Inserisci elemento numero %d\t",t);
		scanf(" %d", &A[t]);
	}
	
	printf("\nArray selezionato:\n");
	
	for(int k=1;k<=n;k++) {
	printf("\n%d", A[k]);
	}
		insertion_sort(n,A);
		
		printf("\n\nL'array ordinato e'");
		for(int z=1;z<=n;z++) {
				printf("\n%d", A[z]);
		}	
		return 0;
}

void insertion_sort(int n,int A[]) {
	int i,elem;
	
	for(int j=2;j<=n;j++) {
		
		elem=A[j];
		i=j-1;
		while(i>0 && A[i]>elem) {
			A[i+1]=A[i];
			i=i-1;
		}
	 A[i+1]=elem;
	}
	
}

8 Risposte

  • Re: SCANF() NON SI FERMA

    Intanto togli lo spazio prima di %d nella scanf
  • Re: SCANF() NON SI FERMA

    Ciao, grazie per la risposta, anche senza spazio mi da lo stesso problema, l’ho messo proprio perché cercando in rete qualcuno consigliava di metterlo ma niente.
  • Re: SCANF() NON SI FERMA

    E poi questo

    int n;
    int A[n];

    è sbagliato dato che il valore di n non è definito e non puoi usarlo prima di assegnarlo
  • Re: SCANF() NON SI FERMA

    Quindi mi consiglia di inserire int A[n] sotto lo scanf?
  • Re: SCANF() NON SI FERMA

    Direi di sì
  • Re: SCANF() NON SI FERMA

    E poi non da 1 a n compreso perché gli indici devono andare da 0 a n-1

    Quindi t=0 e t<n

    Ovviamente devi rivedere tutte le for e il codice
  • Re: SCANF() NON SI FERMA

    Grazie mille, con la modifica precedente che mi ha consigliato funziona perfettamente.
    C’è un motivo preciso per cui è consigliato che gli indici partano da 0? Grazie ancora
  • Re: SCANF() NON SI FERMA

    Perché lo prevede il linguaggio C
Devi accedere o registrarti per scrivere nel forum
8 risposte