la question à l'examen était:et tracer cela parce que mon professeur ne peut pas
écrire la sortie du programme suivant:
int i = 2 ;
int main() {
int j = 10, p ;
while (i-- && p == fork())
if (p < 0) exit(1);
j += 2;
if (p == 0) {
i *= 3;
j *= 3;
}
else {
i *= 2;
j *= 2;
}
printf("i = %d, j = %d \n",i,j);
return 0;
}
sortie de la console en utilisant Xcode avec inclure cette lignes avant int i = 2;
:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
sortie:
i = 3, j = 36
i = 0, j = 36
i = -3, j = 36
Remarque: Je remarque que la sortie est différente si nous utilisons Ubuntu.
Je pense que c'est la sortie de Ubuntu:
i = 2 , j = 24
i = 2 , j = 24
toute brève expliquer ou trace serait grand Merci
Je m'attendrais à ce qu'un enseignant attrape un problème comme celui-ci. Je suppose que p = fork() était ce que l'on voulait dire, mais c'est le danger des déclarations composées. –
oui c'est p = fork() mais le compilateur donne une erreur (dans le temps on devrait écrire comparer les choses pas assigner une valeur) –
Ça devrait être 'while (i-- && (p = fork())! = 0) '- de cette façon, vous transmettez l'intention clairement et le compilateur ne se plaint pas et le code ne dépend pas d'une variable non initialisée. – sharptooth