Buonasera, ho scritto un programma in C per calcolare quali sono i divisori di un numero intero inserito in input da tastiera.
#include<stdio.h>
int main()
{
int n, div, cont, resto;
printf("Inserire il valore:\t");
scanf("%d",&n);
cont=1;
resto=n%cont;
if(n<=0)
printf("Errore: il numero deve essere positivo.\n");
else
if(n==1)
printf("Il divisore di 1 è se stesso.");
for(cont=1; cont<=n; cont++)
{
resto=n%cont;
if(n>1)
{
if(resto==0)
div = cont;
}
printf("%d\t", div);
}
}
Il programma funziona nel senso che dà in output dei risultati corretti, ma con due problemi. Il primo avviene quando viene digitato il numero 1: il messaggio che viene stampato è "Il divisore di 1 è se stesso." con l'aggiunta di una linea di numeri che suppongo sia un indirizzo di memoria, e non capisco come fare per fare in modo che i numeri aggiuntivi non compaiano.
Il secondo problema invece si ha quando viene digitato un numero qualsiasi: i risultati di output sono corretti ma alcuni vengono ripetuti in modo da avere in totale tanti input quanto è il valore del numero che è stato digitato. Esempio:
Mi rendo conto che il problema sta nel fatto che il comando printf si trova all'interno del ciclo e quindi il contatore ripete i risultati fino ad n volte, ma non riesco a capire come modificare il programma senza che smetta di funzionare correttamente.