Fondamentalement, un programme pour trouver le plus grand facteur premier d’un nombre . Je ne sais pas si la logique est correcte car je ne peux pas l’exécuter pour la tester. Je sais que c’est long. Mais s’il te plaît, pardonne-moi.
//largest_prime.c #include int main() { int num,large; int prime(int); int lprime(int); printf("Enter number: "); scanf("%d",&num); large = lprime(num); printf("Largest Prime = %d\n",large); return 0; } int lprime(int num) { int i=num-1,large; while (i!=-1) { if (num%i==0) { if (prime(i)==1) { large=i; i=-1; } i--; } return large; } int prime(int num) { int prime,i=num-1; while (i!=-1) { if(num%i==0) { if(i!=1) { i=-1; return 0; } else return 1; } i--; } }
Je reçois ceci en sortie au terminal (j’utilise Mac) en utilisant GCC:
largest_prime.c: In function 'lprime': largest_prime.c:26: error: nested functions are disabled, use -fnested-functions to re-enable largest_prime.c:39: error: syntax error at end of input
J’ai essayé de -fnested-fonctions pour réactiver. Je reçois:
largest_prime.c: In function 'lprime': largest_prime.c:39: error: syntax error at end of input
S’il vous plaît aider!
lprime manque la fin ‘}’ (en fait, je crois que vous avez perdu pendant que vous traînez ‘}’)
il vous manque un après le return large;
le compilateur en déduit que vous commencez une nouvelle déclaration de fonction dans lprime
où l’erreur de fonction nestede
Les fonctions ne peuvent pas être nestedes dans ISO C; permettre à une extension du compilateur de permettre alors n’est pas la solution; juste rendre votre code valide C. Votre style d’indentation ne vous aide pas ici; mais le fait que la dernière ligne de chaque fonction ne se trouve pas à la marge de gauche doit faire sonner l’alarme. Les compilations suivantes sont compilées mais pas sans avertissements (lignes ajoutées marquées):
//largest_prime.c #include // Forward declarations int lprime(int num) ; //******************** int prime(int num) ; //******************** int main() { int num,large; printf("Enter number: "); scanf("%d",&num); large = lprime(num); printf("Largest Prime = %d\n",large); return 0; } int lprime(int num) { int i=num-1,large; while (i!=-1) { if (num%i==0) { if (prime(i)==1) { large=i; i=-1; } i--; } //******************** } return large; } int prime(int num) { int prime,i=num-1; while (i!=-1) { if(num%i==0) { if(i!=1) { i=-1; return 0; } else return 1; } i--; } }
Les avertissements sont:
main.cpp(34) : warning C4101: 'prime' : unreferenced local variable main.cpp(46) : warning C4715: 'prime' : not all control paths return a value
Je n’ai pas exécuté le code, donc si cela fonctionne correctement, c’est à vous de le déterminer.