SCANF() NON SI FERMA

di lucacar001 il
8 risposte
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

  • Intanto togli lo spazio prima di %d nella scanf
  • 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.
  • E poi questo

    int n;
    int A[n];

    è sbagliato dato che il valore di n non è definito e non puoi usarlo prima di assegnarlo
  • Quindi mi consiglia di inserire int A[n] sotto lo scanf?
  • Direi di sì
  • 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
  • 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
  • Perché lo prevede il linguaggio C
Devi accedere o registrarti per scrivere nel forum
8 risposte