Programme C

Résolu
Bonjour,
Voila j'ai un programme en C mais celui-ci ne marche que sur codeblock sous windows et des que je le lance dans le terminal de ubuntu il ne m'affiche que 0 1..
Help me

#include<stdio.h>
#include<stdlib.h>
main(){
int a;
int b;
int c;
a = 1;
b = 1;
c = 0;
printf("%d\n", c);
triangulaire:
if(a>1000)exit(0);
a = a+1;
b = a+b;
entier:
if(c>100)exit(0);
c = c+1;
if(c<a)
{ printf("%d\n",c);
goto entier;
}
goto triangulaire;
}

--
MUHAHAHAHAHAHAHAHAHA
Configuration: xp

35 réponses

Résumé de la discussion

Le problème vient de la différence entre Windows et Linux : un programme compilé sous Code Blocks produit un exécutable .exe qui ne peut pas être exécuté tel quel sur Ubuntu. Pour Ubuntu, il faut recompiler en utilisant GCC ou un autre compilateur Linux afin d’obtenir un programme native, car Windows et Linux ne partagent pas le même format binaire. Le code utilisait des goto et des boucles simulées, ce qui rend le débogage difficile et peut générer des boucles infinies, privilégier for ou while et des conditions plus claires. D'autre part, il peut être utile de décrire les sorties observées et le flux attendu pour déterminer s’il faut réécrire une section de code ou adopter une approche plus structurée.

Bobot (l’IA à votre service)
  1. A oui je voix sa crée une boucle obligant le programme a recommencer
    oki merci v test sa se soir je posterais surement demain
    merci encore pour ton aide
    0
    1. int a=5;
      while (a < 15) {
      printf("Salut \n");
      a = a+1;
      }

      Comme sa ?
      0
      1. voilà (Attention : pas de majuscule à int ... essaye ton code sur ton compilateur dans un programme test! ).

        On peut faire plus simple : int a = 0; while(a<10) { ... }

        donc voilà, il suffit de rajouter une variable comme ça et une boucle while . Pas "a" car tu utilises déjà ce nom de variable, mais peu importe ;).

        PS : a = a+1; s'écrit a++; habituellement
        0
    2. #include<stdio.h>
      #include<stdlib.h>
      main(){
      int a;
      int b;
      int c;
      a = 1;
      b = 1;
      c = 0;

      Depart

      a=a+1;
      b=a+b;
      while(c=b){
      c++;
      }
      printf("%d ",c);

      Arriver
      }

      Je souhaite quel parte de depart et aille a arriver autant de fois que je le veux.
      Merci

      0
      1. regarde l'exemple de boucle while() que je t'ai donné plus haut. Essaye de raisonner et de créer une boucle qui affiche autant de fois "Salut" que tu le souhaites (disons : 10 par exemple).

        Ensuite, on mélangera ça avec ton programme :)
        0
    3. Heu comment on fait pour que quand la fonction arrive a la fin elle retourne au debut ? (sans utiliser goto)
      0
      1. je ne comprends pas ta phrase. Pourrais-tu préciser ou mettre de la ponctuation et des connecteurs ?
        0
    4. Oki je croi que j'ai compris pour while je vais essayer avec sa merci
      0
      1. n'hésite pas à faire des essais, mais comme je t'ai dis avant : essaye de voir ce que ça va donner, à l'avance, avec un bout de paier et un crayon, et ensuite teste-le pour voir si tu avais raison.

        Si tu ne comprends pas pourquoi tu obtiens qqchose alors que tu pensais obtenir autre chose, fias-nous part de ta question ici, mais en précisant ce que tu pensais obtenir et ce que tu obtiens en fait.
        0
    5. Sa me donne une erreure pour goto.
      En faite j'ai compris comment faire mon programme ces juste que je ne connais pas les bon "mot" pour le faire marcher
      grossièrement l'idée que j'ai actuellement ces de calculé le 1er triangulaire puis de le comparer a mon compteur si ces nes pas les meme je rajoute 1 au compteur et je recommence si c les meme je naffiche rien et je passe au second nombre triangulaire.
      Ces juste que je ne ce pas utiliser les fonctions de boucle comme for while et if
      0
      1. alors il faut apprendre ;) ce n'est pas très compliqué :

        la structure de décision :

        if (condition) {
          //ligne(s) de code à exécuter si condition est vraie
        }
        //à partir d'ici peu importe condition ce sera exécuté
        


        On peut faire aussi :
        if (condition) {
          //ligne(s) de code à exécuter si condition est vraie
        }
        else {
          //lignes de code à exécuter si condition est fausse
        }
        //à partir d'ici peu importe condition ce sera exécuté
         


        Mais il me semble que tu avais déjà compris ça.

        Ensuite les boucles (aussi appelées structures d'itération):
        while (condition) {
          //ligne(s) de code qui s'exécuteront tant que la condition est vraie
        }


        Ex :
        //Dans ce programme rien ne s'affiche.
        int a=5;
        while (a < 3) {
          printf("Salut \n");
          a = a+1;
        }
        
        
        //Dans ce programme "Salut" d'affiche 3 fois.
        int a=5;
        while (a < 8) {
          printf("Salut \n");
          a = a+1;
        }
        
        0
      2. @Pacorabanixnote : il y a deux autres façon de faire une boucle : avec do{...}while() et for(;;){...}, mais en fait tu peux absolument tout faire avec while(){...} uniquement, les autres sont juste des raccourcis ou des petites variantes en quelque sortes.
        0
    6. oki merci du conseil
      0
      1. ici dans ce que le code que tu as donné : qu'est ce que ça te donne ?
        0
    7. lorsque tu écris un programme, il faut prendre l'habitude de prendre une feuille de papier, un crayon et une gomme. Tu essayes d' "exécuter" toi-même ton programme en le faisant, ligne par ligne. Note bien ce qui se passe au niveau des variables. Il faut aussi écrire qqpart ce qui va s'afficher à l'écran. Après 2 ou 3 tours (ou plus), tu verras que ton programme ne fait pas ce que tu veux.
      0
      1. Je pense avoir trouver l'idée pour faire tournée ma fonction
        #include<stdio.h>
        #include<stdlib.h>
        main(){
        int a;
        int b;
        int c;
        a = 1;
        b = 1;
        c = 0;
        encore:
        retour:
        a=a+1;
        b=a+b;
        c++;
        if(c==b), goto retour; // c et le compteur et recois 1 a chaque tour et b contient les nbr triangulaire si c=b alors il retour et rajoute 1 a c et passe au second nbr triangulaire.
        printf("%d ",c); // affiche c ci c n'est pas egale a b.
        if(b<100) goto encore; //recommence la fonction tant que b et inférieure a 100
        }

        j'utilise une fonction if pour dire de faire apparaitre c sauf quand c=b la il nafiche rien et continue son bout de route.
        Mais je narive pas a faire tourner la fonction je ne ces pas pourquoi
        0
        1. if(c==b), goto retour;
          C'est quoi la virgule ?
          Enlève-là, compile, lance le programme et tu auras le résultat suivant:
          1 2 3 4 5 6 7 8 9 10 11 12 13
          C'est bien ce que tu voulais ? Si ce n'est pas le cas, c'est que ton programme n'est pas correct.
          Bonne continuation.
          0
      2. un while c'est comme un if qui se répète temps que la condition est vrai.

        exemple :

        i=0;
        while(i<10){
        ...
        ...
        ...

        i++;

        }

        voila ;)
        0
        1. Merci Romiinet mais je ne connais pas la boucle while ^^
          0
          1. Hum je crois que j'ai compris l'idée je crée un tableau avec dedans la fonction triangulaire et dans la fonction nombre j'appel la fonction triangulaire pour quel "supprime" les nombres égaux.
            0
            1. je n'est pas lu toute les raiponces, je ne sait pas si on te la déja dit mais tes 6 1er ligne se résume a sa :
              int a,b,c;
              a = b = c = 1;

              ou :

              int a=1,b=1,c=1;

              la boucle while est plus simple a utiliser si tu a du mal avec le for.

              les GOTO oublie c'est très mauvais.
              0
              1. et je me rends compte que ma réponse avec le tableau doit être incompréhensible pour toi alors, désolé.
                0
                1. C'est si horrible que sa mdr
                  0
                  1. On vien juste de commencer les boucles for avec on a plus besoin d'utiliser goto donc je pourais suivre ton conseil et ne plus lutiliser enfin je crois
                    0
                    1. oui, alors ça doit juste être très très temporaire, le temps que tu apprennes les boucles en effet. J'ai eu peur tout d'un coup :)
                      0
                  2. Paris 8 université de Saint seint denis dans le 93
                    0
                    1. quel horreur enlevé moi ses GOTO !! O_o
                      0
                      • 1
                      • 2