Affichage d’une sortie différente pour deux codes presque identiques

Dans les deux codes suivants, je ne comprends pas le problème. Le premier code est:

#include  main() { int num1, num2; scanf("%d%d", &num1, &num2); printf("I LOVE MY INDIA\n"); //here is '\n' after the statement printf("%d", num1/num2); return 0; } 

Ici, si les entrées sont num1=2 et num2=0 alors dans le compilateur gcc, la sortie est:

J’AIME MON INDE
Exception en virgule flottante (kernel vidé)

Mais pour le deuxième code:

 #include  main() { int num1, num2; scanf("%d%d", &num1, &num2); printf("I LOVE MY INDIA"); //here is no '\n' printf("%d", num1/num2); return 0; } 

Pour la même entrée que précédemment, ceci montre:

Exception en virgule flottante (kernel vidé)

Entre ces deux codes, il n’y a qu’une seule différence. Dans le premier, il y a un \n après I LOVE MY INDIA et dans le second code, il n’y a pas de \n . S’il vous plaît expliquer pourquoi I LOVE MY INDIA n’est pas affiché dans le 2ème code.

Par défaut, la sortie standard ( stdout ) est une ligne mise en mémoire tampon.

Dans le premier cas, la nouvelle ligne \n dans printf() provoque le vidage du tampon de sortie sur la sortie avant le blocage. Donc, vous devez voir la déclaration d’impression.

OTOH, dans le second cas, l’absence de \n entraîne le stockage des données par la mémoire tampon, et l’instruction suivante provoque l’exception et une fin anormale du programme. Ainsi, les données mises en mémoire tampon n’ont pas eu l’occasion d’être envoyées au terminal de sortie. Par conséquent, vous n’avez aucune sortie visuelle .

Cela dit, une division par zéro provoque un comportement indéfini et, à proprement parler, on ne peut pas compter sur votre programme pour obtenir le résultat attendu.