Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajouter un mot dans une variable.

Sujet résolu
    19 décembre 2005 à 18:12:40

    Salut a tout les developpeurs :)

    Voila, j'ai un nouveau soucis .. :-°

    Je désierai faire la même chose que je faisais en VB, qui est d'ajouter un mot, un nombre, un caractère dans une variable. C'est à dire que en VB je faisais :

    Private Sub FormLoad()
    MaVar = "Je met un mot"
    MaVar = MaVar & " J'en ajoute un autre"
    MaVar = MaVar & " ; Je rajoute le chiffre 9"

    Msgbox MaVar
    End Sub


    Et MaVar contenant "Je met un mot J'en ajoute un autre ; Je rajoute le chiffre 9".

    En C, j'ai essayé de faire :
    #include <stdio.h>

    int main(int argc, char *argv[])
    {

       char MaVar;

       MaVar = "Je met un mot";

       MaVar = (MaVar + " J'en ajoute un autre");

       MaVar = (MaVar + " ; Je rajoute le chiffre 9");

     return 0;
    }


    Mais j'ai les erreurs suivantes :
    erreur:8 attention : assignement makes integer from pointer without a cast
    erreur:10 attention : assignement makes integer from pointer without a cast
    erreur:12 attention : assignement makes integer from pointer without a cast


    Je sais que par exempe pour ajouter un caractère a MaVar, il faut mettre :
    MaVar = '/';


    Mais la je peut pas a cause du J' de J'en ajoute un autre.

    Donc si quelqu'un peu me dépanner .. ? Merci a vous tous !! ^^
    • Partager sur Facebook
    • Partager sur Twitter
      19 décembre 2005 à 18:43:54

      Aïe, ce que tu fais est très dangereux :)
      Tu commences à mettre le doigt sur un point sensible du langage C/C++ qui le distingue des langages plus simple comme le basic : la gestion des chaines de caractères n'est pas aussi simple que cela.

      C++ possèdes de nombreuses librairies, nottament la librairie standard STL avec la classe string, qui simplifie la manipulation de chaines.

      Cependant le type "chaine de caractère" n'existe pas en tant que tel en C/C++ : la seule chose que tu puisses faire, c'est utiliser des tableaux de caractères.
      Je suppose que Mateo fera un cours complet sur le sujet lorsqu'il abordera les tableaux, néanmoins voici quelques indications :

      Une chaine en C/C++ se représente basiquement sous forme d'un tableaux de type char dont les éléments sont les lettres de la chaine à laquelle on ajoute le caractère spécial '\0' qui annonce la fin d'une chaine de caractère (c'est une convention utilisée dans de nombreuses fonctions standards et non standards).
      Par exemple, si tu veux stocker la chaine "Bonjour" en mémoire, il va te falloir faire ceci :

      char chaine[8] = {'B','o','n','j','o','u','r','\0'};


      Bien sûr comme c'est un peu fastidieux, C/C++ permets d'initialiser les chaines de caractère de cette manière :

      char chaine[8] = "Bonjour";


      Ce code fait la même chose qu'avant (à savoir remplir les cases du tableau avec les lettre et ajouter le caractère spécial '\0' en dernière case)

      Il faut toujours garder à l'esprit qu'une chaine de caractère en C/C++ se termine par le carctère nul '\0' !!! Quand on crée un tableau pour y stocker une chaine de caractère, il faut impérativement que le tableau contient autant de cases que la chaine contient de lettres plus 1 case pour le carctère '\0' !!! (c'est pour ca que mon tableau a 8 éléments alors que Bonjour n'a que 7 lettres)


      Pour afficher le contenu de ta caine de caractère, il faut utiliser l'indicateur de format %s (string) dans la fonction printf, exemple :

      char chaine[8] = "Bonjour";
      printf("%s",chaine);


      Affiche :

      Bonjour


      à l'écran.

      Enfin, C mets à ta disposition de nombreuses fonctions permettant de manipuler les chaines, dont les prototypes se trouvent dans "string.h", néanmoins il faut faire extrêmeent attention en les utilisant et je te recommande très fortement d'attendre le chapitre dédié avant de te lancer là dedans :)
      • Partager sur Facebook
      • Partager sur Twitter
        19 décembre 2005 à 19:09:17

        Pour compléter thomasc : tu dois utilisez string pour faire ce genre de chose.
        Tu dois pour cela l'inclure :
        #include <string.h>

        Ensuite, tu peux utilisez la classe string comme un char :

        string MarVar = "Je met un mot";

        Et ensuite faire ce que tu veux faire :

        string MaVar = "Je met un mot";
        MaVar += " J'en ajoute un autre";
        MaVar += " ; Je rajoute le chiffre 9";

        Ce qui rend plus facile la gestion des chaînes de caractères (Mais tu dois convertir en char pour pouvoir l'afficher dans printf(), ou tu gagne un beau rapport d'erreur a afficher :p )
        • Partager sur Facebook
        • Partager sur Twitter
          19 décembre 2005 à 19:12:31

          sauf qu'il me semble que string n'existe qu'en C++
          • Partager sur Facebook
          • Partager sur Twitter
            19 décembre 2005 à 19:15:46

            Oui string n'existe en effet qu'en C++, c'est pourquoi je te recommande d'attendre le chapitre approprié du cours de Mateo avant de te lancer dans la manipulation des chaines ;)
            • Partager sur Facebook
            • Partager sur Twitter
              20 décembre 2005 à 2:39:25

              A de trés bonnes explications !!

              Je vais attendre le cours de Mateo, je pense, mais je vais commencer a travailler de mon coté !

              En tous cas, merci a vous tous !!

              J'ai enfin trouvé une communauté de programmeurs qui sont pas la pour s'envoyer chier .. arf ... Je désépérais !!! :D
              • Partager sur Facebook
              • Partager sur Twitter
                20 décembre 2005 à 6:17:22

                Bonjours à tous, j'ai le même problème, mais dans une condition...

                #include <stdio.h>
                #include <stdlib.h>
                #include <math.h>
                #include <string.h>
                
                int main(int argc, char *argv[])
                {
                  double nombre01 = 0, nombre02 = 0;
                  double resultat01 = 0, resultat02 = 0, resultat03 = 0, resultat04 = 0, resultat05 = 0, resultat06 = 0, resultat07 = 0, resultat08 = 0, resultat09 = 0, resultat10 = 0;
                  double resultat11 = 0, resultat12 = 0, resultat13 = 0, resultat14 = 0, resultat15 = 0, resultat16 = 0, resultat17 = 0, resultat18 = 0, resultat19 = 0, resultat20 = 0;
                  long calc = 1;
                  char ouiOuNon[3];
                  printf("This small program had been made by -edited- and is always beta-testing, adding always and always new things.\n\n");
                  
                  if (calc == 1)
                  {
                  printf("Votre premier nombre   : ");
                  scanf("%lf", &nombre01);
                  printf("Votre deuxieme nombre  : ");
                  scanf("%lf", &nombre02);
                  resultat01 = nombre01 + nombre02;
                  resultat02 = nombre01 - nombre02;
                  resultat03 = nombre01 * nombre02;
                  resultat04 = nombre01 / nombre02;
                  resultat05 = pow(nombre01, nombre02);
                  resultat06 = pow(nombre02, nombre01);
                  resultat07 = pow(nombre01, 2);
                  resultat08 = pow(nombre02, 2);
                  resultat09 = sqrt(nombre01);
                  resultat10 = sqrt(nombre02);
                  resultat11 = hypot(nombre01, nombre02);
                  resultat12 = sqrt(resultat07 - resultat08);
                  resultat13 = sqrt(resultat08 - resultat07);
                  resultat14 = nombre01 * M_PI;
                  resultat15 = nombre02 * M_PI;
                  resultat16 = resultat07 * M_PI;
                  resultat17 = resultat08 * M_PI;
                  resultat18 = nombre02 - nombre01;
                  resultat19 = nombre02 / nombre01;
                  printf("\nFormule de Base\n");
                  printf("%.4lf + %.4lf = %.4lf\n", nombre01, nombre02, resultat01);
                  printf("%.4lf - %.4lf = %.4lf\n", nombre01, nombre02, resultat02);
                  printf("%.4lf - %.4lf = %.4lf\n", nombre02, nombre01, resultat18);
                  printf("%.4lf * %.4lf = %.4lf\n", nombre01, nombre02, resultat03);
                  printf("%.4lf / %.4lf = %.4lf\n", nombre01, nombre02, resultat04);
                  printf("%.4lf / %.4lf = %.4lf\n\n", nombre02, nombre01, resultat19);
                  printf("Puissance\n");
                  printf("%.4lf P %.4lf = %.4lf\n", nombre01, nombre02, resultat05);
                  printf("%.4lf P %.4lf = %.4lf\n", nombre02, nombre01, resultat06);
                  printf("%.4lf P2 ..... = %.4lf\n", nombre01, resultat07);
                  printf("%.4lf P2 ..... = %.4lf\n\n", nombre02, resultat08);
                  printf("Racine\n");
                  printf("%.4lf ........ = %.4lf\n", nombre01, resultat09);
                  printf("%.4lf ........ = %.4lf\n\n", nombre02, resultat10);
                  printf("Cercle\n");
                  printf("%.4lf x Pi ... = %.8lf\n", nombre01, resultat14);
                  printf("%.4lf x Pi ... = %.8lf\n", nombre02, resultat15);
                  printf("C %.4lf x Pi . = %.8lf\n", nombre01, resultat16);
                  printf("C %.4lf x Pi . = %.8lf\n\n", nombre02, resultat17);
                  printf("Theoreme de Pythagore\n");
                  printf("Hypothenuse ... = %.4lf\n", resultat11);
                  printf("Catete ........ = %.4lf or %.4lf\n\n", resultat12, resultat13);
                  printf("Voulez-vous continuer?)\n");
                  scanf("%s", &ouiOuNon);
                    if (ouiOuNon == non) /*Dev-C++ me dit que cette ligne est invalide car il considère le "non" comme une variable, ce qui est faut.*/
                  getchar(); getchar();
                  {
                      return 0;
                      }
                    else
                    { }
                }
                


                La questions est comment pourrai-je m'arranger pour que si l'utilisateur dit non (ou que s'il dit des mots semblabes ((no, n, 0) <-- si possible)), que le programme se ferme, pour le reste (else) je pense que je m'arrangerais,
                merci d'avance au zéros

                Note : SVP ne pas me demander pourquoi je l'ai fait en franglais, merci (*Quebec*).
                • Partager sur Facebook
                • Partager sur Twitter
                  20 décembre 2005 à 10:45:52

                  Pour tester une chaine de caractère, tu peux le faire caractère par caractère (ouiOuNon[0] == 'n' && ouiOuNon[1] == 'o' && ouiOuNon[2] == 'n') ou alors utilisez une fonction qui les test tout en même temps (strcmp(ouiOuNon,"non") || strcmp(ouiOuNon,"no")).
                  Faire "ouiOuNon == non" signifierait "est ce que la chaine de caractère entière ouiOuNon est egal a la variable non ?" ce qui est impossible :)
                  Le code donnerait sa en clair ^^ (avec un peu des 2 test) :

                  #include <stdio.h>
                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <math.h>
                  #include <string.h>
                  
                  int main(int argc, char *argv[])
                  {
                    double nombre01 = 0, nombre02 = 0;
                    double resultat01 = 0, resultat02 = 0, resultat03 = 0, resultat04 = 0, resultat05 = 0, resultat06 = 0, resultat07 = 0, resultat08 = 0, resultat09 = 0, resultat10 = 0;
                    double resultat11 = 0, resultat12 = 0, resultat13 = 0, resultat14 = 0, resultat15 = 0, resultat16 = 0, resultat17 = 0, resultat18 = 0, resultat19 = 0, resultat20 = 0;
                    long calc = 1;
                    char ouiOuNon[3];
                    printf("This small program had been made by -edited- and is always beta-testing, adding always and always new things.\n\n");
                   
                    if (calc == 1)
                    {
                            printf("Votre premier nombre   : ");
                            scanf("%lf", &nombre01);
                            printf("Votre deuxieme nombre  : ");
                            scanf("%lf", &nombre02);
                            resultat01 = nombre01 + nombre02;
                            resultat02 = nombre01 - nombre02;
                            resultat03 = nombre01 * nombre02;
                            resultat04 = nombre01 / nombre02;
                            resultat05 = pow(nombre01, nombre02);
                            resultat06 = pow(nombre02, nombre01);
                            resultat07 = pow(nombre01, 2);
                            resultat08 = pow(nombre02, 2);
                            resultat09 = sqrt(nombre01);
                            resultat10 = sqrt(nombre02);
                            resultat11 = hypot(nombre01, nombre02);
                            resultat12 = sqrt(resultat07 - resultat08);
                            resultat13 = sqrt(resultat08 - resultat07);
                            resultat14 = nombre01 * M_PI;
                            resultat15 = nombre02 * M_PI;
                            resultat16 = resultat07 * M_PI;
                            resultat17 = resultat08 * M_PI;
                            resultat18 = nombre02 - nombre01;
                            resultat19 = nombre02 / nombre01;
                            printf("\nFormule de Base\n");
                            printf("%.4lf + %.4lf = %.4lf\n", nombre01, nombre02, resultat01);
                            printf("%.4lf - %.4lf = %.4lf\n", nombre01, nombre02, resultat02);
                            printf("%.4lf - %.4lf = %.4lf\n", nombre02, nombre01, resultat18);
                            printf("%.4lf * %.4lf = %.4lf\n", nombre01, nombre02, resultat03);
                            printf("%.4lf / %.4lf = %.4lf\n", nombre01, nombre02, resultat04);
                            printf("%.4lf / %.4lf = %.4lf\n\n", nombre02, nombre01, resultat19);
                            printf("Puissance\n");
                            printf("%.4lf P %.4lf = %.4lf\n", nombre01, nombre02, resultat05);
                            printf("%.4lf P %.4lf = %.4lf\n", nombre02, nombre01, resultat06);
                            printf("%.4lf P2 ..... = %.4lf\n", nombre01, resultat07);
                            printf("%.4lf P2 ..... = %.4lf\n\n", nombre02, resultat08);
                            printf("Racine\n");
                            printf("%.4lf ........ = %.4lf\n", nombre01, resultat09);
                            printf("%.4lf ........ = %.4lf\n\n", nombre02, resultat10);
                            printf("Cercle\n");
                            printf("%.4lf x Pi ... = %.8lf\n", nombre01, resultat14);
                            printf("%.4lf x Pi ... = %.8lf\n", nombre02, resultat15);
                            printf("C %.4lf x Pi . = %.8lf\n", nombre01, resultat16);
                            printf("C %.4lf x Pi . = %.8lf\n\n", nombre02, resultat17);
                            printf("Theoreme de Pythagore\n");
                            printf("Hypothenuse ... = %.4lf\n", resultat11);
                            printf("Catete ........ = %.4lf or %.4lf\n\n", resultat12, resultat13);
                            printf("Voulez-vous continuer?)\n");
                            scanf("%s", &ouiOuNon);
                            if (strcmp(ouiOuNon,"non") || strcmp(ouiOuNon,"no") || ouiOuNon[0] == 'n' || ouiOuNon[0] == 0)
                            {
                                  getchar(); getchar();
                                  return 0;
                            } else
                            {
                                  
                            }
                    }
                    return 0;
                  }
                  

                  Pense aussi a bien indenter :)

                  PS : si tu comprend pas tout, attend le prochain cours, sa serat certainement mieux expliquer que moi.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 décembre 2005 à 22:47:17

                    Sa marche super bien (en modifier aussi le if et en enlevant le else et en modifiant le if(du debut) pour une boucle while, merci tif-tof
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ajouter un mot dans une variable.

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown