IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème code débutant


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut Problème code débutant
    Bonjour,

    En cours d'apprentissage en language c#, j'éprouve des difficultés avec Visual studio qui me refuse le code suivant:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace deuxiemeVersionExerciceEval1
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                System.IO.StreamReader contenuFichier = new System.IO.StreamReader(@"abcd.txt");
     
                string[] contenuTempo = contenuFichier.ReadToEnd().Split(new string[]{'/n','/r'});
                Console.WriteLine("Mot à chercher");
                string motVoulu = Console.ReadLine();
     
     
               for (int i; i < contenuTempo.Length; i++)
               {
                   if (contenuTempo[i] != motVoulu)
                   {
                       Console.WriteLine("KO!");
                   }
                   else
                   {
                       Console.WriteLine("OK!");
                       if (i > 0) Console.WriteLine("Mot d'avant: " + contenuTempo.Length[i - 1]);
                       if (i != contenuTempo.Length[i - 1]) Console.WriteLine("Mot d'après: " + contenuTempo.Length[i + 1]);
                   }
               }
               Console.WriteLine("Appuyez sur une touche pour sortir!");
               Console.ReadKey();
            }
        }
    }
    Au niveau de la déclaration de la boucle for, Length n'est pas accepté.

    Visual Studio me dit que ce n'est pas possible d'appliquer l'indexation à l'aide de [] à une expression de type int.
    ...Mais j'ai tout déclaré en string !?!

    Le résultat c'est que c'est impossible de lance la solution.

    Où sont mes erreurs et ai je fait des erreurs ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 428
    Par défaut
    Bonjour,
    ContenuTempo est déclaré comme un tableau de chaine (string[]), donc il n'a pas de propriété Length.
    Vu ton code je pense que tu cherches la nombre d'élément, il faut donc utiliser la propriété ..Count.

    Tatayo.

    P.S. je pense que tu vas avoir un problème d'index ligne 32...

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    Merci tatayo,

    Il s'agit là d'un exercice que j'ai eu pour ma première évaluation. Il faut vérifier l'existence dans un fichier dictionnaire du terme demandé par l'utilisateur, puis afficher le mot d'avant et d'après.
    L'exercice ne nous demande pas de compter. Le seul impératif est que le programme fonctionne, on obtient aucun point si l'on arrive pas à fournir un programme fonctionnel qui répond à la consigne.
    Malheureusement c'est ce qui m'est arrivé.

    Je tente de le refaire d'une autre manière que la correction, où le formateur utilise la méthode ReadAllLine().
    Cette dernière nous épargne les problèmes de Split et de traitement de tableau. Or mon soucis se trouve là.
    Je ne comprend pas bien l'utilisation de IndexOf.
    Alors je tente de le faire de cette façon de mon côté pour comprendre.

    Quant à la propriété Length, si je souhaite l'utiliser, faut il que je Parse ?
    Y a t il un moyen d'obtenir la même propriété Length mais avec du string ?

    Cordialement,

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonjour,

    Il y a plusieurs problèmes:

    1. Ta variable i n'a pas de valeur initiale, c'est pour ça que Visual Studio fait la gueule
    2. Pour accéder a un élément d'un tableau, il suffit de faire contenuTempo[i - 1] et non contenuTempo.Length[i - 1]
    3. La ligne
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if (i != contenuTempo[i - 1])
      ne marchera pas non plus, tu veux évaluer une égalité entre un entier et un string.
    4. La ligne
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       string[] contenuTempo = contenuFichier.ReadToEnd().Split(new string[] { '/n', '/r' });
      pareil, il faut utiliser des string et non des char, il faut ajouter un argument de type StringSplitOptions (regarde les différentes méthodes et les paramètres de celles-ci.

      Ça marche mieux comme ça :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      string[] contenuTempo = contenuFichier.ReadToEnd().Split(new string[] { "/n", "/r" },StringSplitOptions.RemoveEmptyEntries);


    Il y a peut-être d'autres problèmes, mais régler ceux la te permettra déjà de compiler ton code.

    @tatayo

    Tu as du confondre List et Array car les tableaux contiennent très bien une propriété Length, c'est List qui contient une propriété Count. Bien qu'il soit possible d'utiliser une méthode Count pour un tableau, en utilisant LINQ

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    Merci PixelJuice,

    Suite à tes conseils j'ai modifié le code de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace deuxiemeVersionExerciceEval1
    {
        class Program
        {
            static void Main(string[] args)
            {
     
                System.IO.StreamReader contenuFichier = new System.IO.StreamReader(@"abcd.txt");
     
                string[] contenuTempo = contenuFichier.ReadToEnd().Split(new string[] { "/n", "/r" }, StringSplitOptions.RemoveEmptyEntries);
                Console.WriteLine("Mot à chercher? ");
                string motVoulu = Console.ReadLine();
     
     
               for (int i=0; i < contenuTempo.Length; i++)
               {
                   if (contenuTempo[i] != motVoulu)
                   {
                       Console.WriteLine("KO!");
                   }
                   else
                   {
                       Console.WriteLine("OK!");
                       if (i > 0) Console.WriteLine("Mot d'avant: " + contenuTempo[i - 1]);
                       if (i != int.Parse(contenuTempo[i - 1]))
                       {                
                       Console.WriteLine("Mot d'après: " + contenuTempo[i + 1]);
                       }
                   }
               }
               Console.WriteLine("Appuyez sur une touche pour sortir!");
               Console.ReadKey();
            }
        }
    }

    J'ai assigné i à zéro, et parsé contenuTempo dans le troisième if.
    Mon code se compile correctement.

    Mais j'ai que le résulta KO!

    qui fonctionne. Même si le mot existe dans le dictionnaire, la solution OK! ne fonctionne pas.

  6. #6
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour,

    C'est dans ces moments là que débugger est important.Tu vas pouvoir observer l'état de tes variables pas à pas et ainsi comprend pourquoi tu ne rentres pas dans un cas.
    Par exemple tu peux te faire avoir par la casse ( prise en compte des majuscules et minuscules ).

    Si tu n'as pas appris à utiliser le debugger par içi.

    C'est ô combien important, pour maintenant et tout au long de ta carrière de developpeur.

Discussions similaires

  1. [XL-2003] Débutant // Problème code VBA
    Par SAKAROV dans le forum Macros et VBA Excel
    Réponses: 38
    Dernier message: 09/03/2010, 18h20
  2. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17
  3. Réponses: 3
    Dernier message: 24/09/2005, 09h34
  4. Xsl problème d'affichage (code) [débutant]
    Par redsaint dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 01/06/2005, 17h02
  5. [DB2] problèmes de débutant
    Par rémi_tounul dans le forum DB2
    Réponses: 4
    Dernier message: 21/04/2005, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo