Pourquoi mon programme accepte-t-il un nombre entier de trop et en entre un de trop?

J’aimerais comprendre pourquoi le programme me permet de saisir 3 nombres entiers lorsque j’ai défini SIZE à 2. Et lorsqu’il renvoie le tableau, il ne retourne que deux nombres PAS les trois que j’ai entrés.

//C How to Program Exercises 2.23 #include  #include  #define SIZE 2 int main (void){ int myArray[SIZE]; int count; printf("Please enter 5 integers\n"); for (count=1;count<=SIZE;count++){ scanf("%d\n",&myArray[count]); } for (count=1;count<=SIZE;count++){ printf("The values of myArray are %d\n",myArray[count]); } getch(); return 0; } 

Vos boucles devraient être

 for (count=0;count 

L'indexation des tableaux est 0 basée sur C.

Comme vous avez un appel de type chatacter ( \n ) dans scanf() , le système attend que vous saisissiez un caractère autre qu'un caractère pour terminer chaque appel. Supprimer le \n :

  for (count=0;count 

Les tableaux C sont indexés à partir de 0 et non de 1 . C n’effectue pas automatiquement la vérification des limites sur les access au tableau et votre code est en effet bien formé. Cependant, son comportement au moment de l’exécution n’est pas défini car il utilise une expression d’élément de tableau pour écrire en dehors des limites de ce tableau et, séparément, il utilise une expression d’élément de tableau pour lire en dehors des limites de ce tableau.

Si le programme présente définitivement un comportement indéfini à chaque passage, on ne peut absolument rien dire de ce qu’il devrait faire. Si, dans la pratique, vous observez la boucle d’entrée itérer trois fois, il est probable que la deuxième itération écrase la valeur de la variable count . Compte tenu de l’ordre dans lequel les variables sont déclarées, il s’agit d’une manifestation plausible du comportement indéfini en jeu.

La boucle de sortie, par contre, itère exactement le nombre de fois que vous lui avez dit de le faire: une fois avec count == 1 et une fois de plus avec count == 2 . Cela n’est nullement garanti compte tenu de l’indétermination générale de l’exécution de votre programme, mais c’est le comportement le moins surprenant auquel je puisse penser.

pourquoi le programme me permet de saisir 3 nombres entiers

Cette boucle s’exécute exactement 2 fois:

 for (count=1;count<=SIZE;count++){ scanf("%d\n",&myArray[count]); } 

Mais comme vous avez utilisé \n dans le scanf() , ce scanf() attend que vous laissiez des espaces.

Proper Input code:

 for (count=0;count 

Et quand il retourne le tableau, il ne retourne que deux nombres

Votre code de sortie d'origine imprime correctement le premier numéro, mais votre deuxième numéro est une valeur erronée.

Proper Output Code:

 for (count=0;count 

Donc, le code complet va comme ceci:

 //C How to Program Exercises 2.23 #include  #include  #define SIZE 2 int main (void){ int myArray[SIZE]; int count; printf("Please enter 5 integers\n"); for (count=0;count