0
votes

Initialiser la valeur des paramètres définis par l'utilisateur pour la matrice en C

J'ai appris dans le livre de texte, qu'il n'y a que quelques façons d'initialiser un tableau.

Méthode 1: P>

#include<stdio.h>
#include<conio.h>

int main()
{
    int i, n;
    printf("Enter array parameter: \n");
    scanf("%d",&n);
    int a[n]; 
    int b[n];
    
    for(i=0;i<n;i++)
    {
        printf("Enter value for array a[%d]: \n",i+1);
        scanf("%d",&a[i]);
    }
    n -= 1; 
    for(i=0;i<=n;i++)
    {
        b[i]=a[n-i];
    }
    printf("Value of array b[] is: \n");
    for(i=0;i<=n;i++)
    {
        printf("%d ",b[i]);
    }
    for(i=0;i<=n;i++)
    {
        printf("\narray b[%d] = %d ",i,b[i]);
    }
    
    getch();
}


5 commentaires

int ary [5] {1,2,3,4,5}; - vous ne pouvez pas le faire dans C. Il est valide en C ++ 11


Votre code est fragile. Vous ne pouvez utiliser aucune fonction d'entrée d'utilisateur, par exemple scanf ("% d", & n) correctement sauf si vous Vérifiez le retour , par ex. si (scanf ("% d", & n)! = 1) {Fallts ("Erreur: entrée entière non valide. \ N", stardr); retour 1; } Sinon, comprenez que vous utilisez Longueur variable des tableaux (VLAS) qui peuvent ne pas être pris en charge par tous les compilateurs commençant par C11. N'incluez pas conio.h , cet en-tête de DOS antique rend votre code 100% non portable à autre chose que la fenêtre. stdio.h vous offre tout ce dont vous avez besoin. Il suffit d'utiliser getchar () pour maintenir votre fenêtre ouverte au lieu de getch () .


Je digeste mais qu'est-ce que c'est C11? et j'utilise dev c ++ 5.11. De quoi parle la version du compilateur?


Votre sortie est simplement du texte brut. Pas besoin d'ajouter une capture d'écran au lieu de simplement copier et collez-la sous forme de texte dans votre question.


C11 est la version 2011 de la norme C. Mais méfiez-vous, le premier commentaire n'a pas mentionné C11, mais C ++ 11 qui est la version 2011 de C ++. Et comme nous le savons, C et C ++ sont des langues très différentes.


5 Réponses :


1
votes
int ary[5] = {1,2,3,4,5};

1 commentaires

C'est la norme ISO / CEI 9899: 1999 [9] C. Voir le lien pour plus de détails sur les normes C: lien



0
votes

Array Initialisation dans C CODE>:

if(scanf("%d",&n) == EOF){
    /*errors ocuured*/
    f_invoke_error_handling_rotuine(); 
}


0 commentaires

0
votes

Vous avez un grand nombre de problèmes, comportement non défini em> étant le plus critique: xxx pré>

quand i == n code>, vous Index un au-delà de la fin de votre B [] code> tableau. Tous les tableaux en C sont nuls sont indexés, de sorte que vos limites de boucle sont 0 . En utilisant i vous en boucle un-trop souvent. P>

Vous ne parvenez pas à vérifier le retour de toute entrée d'utilisateur. Essayez d'entrer '"one"' ou frapper accidentellement 'r' code> au lieu de 4 code> et voyez ce qui se passe. Vous devez vérifier le retour fort> pour chaque entrée d'utilisateur et gérer l'erreur. Que se passe-t-il si l'utilisateur entre 1, 2, 'r', 5 code>? Vous devez également vider stdin code> de tous les caractères étrangers ou ils vous mordront à nouveau sur votre prochaine entrée. P>

n'utilise pas conio.h code>. Cela rend votre code 100% non portable. Vous pouvez utiliser les fonctions dans stdio.h code> pour vos besoins. P>

qui dit, lorsque vous devez faire des tâches répétitives telles que prenant une entrée entière, écrivez une fonction courte pour le faire. Vous pouvez écrire un qui prend un pointeur sur l'entier à remplir et un pointeur à l'invite à afficher et à renvoyer 0 code> sur succès ou -1 code> si l'utilisateur annule la saisie par Génération d'un manuel EOF CODE> avec Ctrl + D KBD> sur Linux ou Ctrl + Z KBD> sous Windows. Vous pouvez ajouter une fonction d'assistance à vide stdin code>, par exemple p> xxx pré>

le reste de votre programme pour lire un tableau dans A [] code> et inverser-le dans b [] code> est simplement: p> xxx pré>

Exemple Utilisez / sortie Strong> P >

Toutes les entrées valides: p> xxx pré>

erreurs en entrée: p> xxx pré>

utilisateur annule l'entrée: p>

$ ./bin/getarray
Enter array parameter: 5
enter value for a[1]: 5
enter value for a[2]: 4
enter value for a[3]: 3
enter value for a[4]:   (user canceled input)


0 commentaires

0
votes

Comme quelqu'un l'a noté, le premier moyen ne fonctionne pas dans C. Il est valide C ++ cependant.

La deuxième manière int ary [] = {1,2,3,4,5}; Works, le tableau Ary est initialisé avec 5 éléments à la compilation (avant même d'exécuter le programme). La mémoire est allouée sur la pile.

Vous pouvez également le faire comme ce int ary [6] = {1,2,3,4,5}; , où vous Spécifiez quelle longueur vous voulez que le tableau soit. Vous pouvez ensuite accéder à ary [5] et le modifier à toute valeur que vous souhaitez (par défaut, il est 0).

Note : ary [6] est hors limites, car les éléments de la matrice vont de 0 à 5.

dans votre code, vous utilisez quelque chose appelé tableaux de longueur variable (VLAS) et indiqué par Wikipedia , ils sont alloués à une durée de stockage automatique sur la pile. Cela signifie que lorsque la fonction où vous les avez déclarées, leur durée de vie se termine également (elles sont locales à la portée de la fonction que vous les déclarez). Pour comprendre pourquoi cela est important, considérez cette pièce de code: xxx

pour corriger ce problème, vous devez utiliser masloc défini dans stdlib.h . xxx

La raison pour laquelle cela fonctionne est que la mémoire allouée à l'aide de Malloc est allouée sur le tas, ce qui signifie qu'il survit à la Durée entière du programme Sauf si vous le comprenez vous-même (cela signifie que vous devez libérer la mémoire à la fin à l'aide de la fonction GRATUITE ).


0 commentaires

0
votes

"Ce code serait-il bien? Quelqu'un peut-il m'apprendre une meilleure façon de le faire?"

Ce code est correct d'une perspective syntaxtique (vous avez corrigé la mauvaise initialisation), mais pas portable car vous utilisez des tableaux de longueur variable (VLAS) qui pourrait ne pas être supporté par aucune implémentation (elles sont fournies mon Extensions de compilateur) et n'étaient que totalement conformes à la norme C99.

Un meilleur moyen de le faire, est d'utiliser MALLOC () et d'allouer la mémoire de la matrice sur le tableau tas.

Cela a également l'avantage que vous pouvez redimensionner le tableau si vous souhaitez (le rendre plus grand Fe) et gratuit () la mémoire de la matrice quand ce n'est plus nécessaire .

Stuff associé:


0 commentaires