CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c] Effectuer un déplacement

mersalaayitten
mersalaayitten
Niveau 10
27 septembre 2015 à 18:38:11

Bonjour voici mon code,

#include <stdio.h>
#include <stdlib.h>
 
int main () {
 
    int i = 0, j = 0;
    char lettre1 [][];
    char lettre2 [][];
 
    for(i = 0; i < 15; i < i++) {
        if(i==8 || i == 12) {
            for(j = 0; j < 10; j++) {
                printf("=");
            }
        }
 
        printf("\n");
    }
 
    return 0;
}

Je cherche à crée une lettre entre les deux lignes formées par les "=", puis déplacer cette lettre entre ces deux lignes jusqu'à un certain point. Pour cela je pensais crée deux tableaux de type char lettre1 et lettre2, je pensais faire un system(clear) tous les deux secondes (le temps que met la lettre pour passé d'une case de mon tableau à une autre) mais mon problème est que je ne vois pas comment faire avancé cette lettre. Si vous pouvez m'aidez je vous remercie d'avance.

Candystand
Candystand
Niveau 10
27 septembre 2015 à 19:16:28

Je capte pas trop l'idée, tu pourrais pas faire un schéma de ce que tu veux vite fait?

Message édité le 27 septembre 2015 à 19:16:35 par Candystand
mersalaayitten
mersalaayitten
Niveau 10
27 septembre 2015 à 19:19:32

En gros je place une lettre par exemple 'A' , on a par exemple:

=============

A

=============

Je cherche a le déplacer jusqu'à qu'il arrive à

=============

----------------------A (sans les tirets)

=============

Ce que je compter faire c'est un tableau lettre1 qui contient la lettre puis cette lettre passe dans lettre2 et à l'aide d'un system(clear) j'efface le A de lettre1 et ainsi de suite sauf que je ne vois pas comment commencé, je pense faire une alloc dynamiquement pour les deux tableaux.

mersalaayitten
mersalaayitten
Niveau 10
27 septembre 2015 à 19:20:16

Genre toutes les secs la lettre avance d'une case et on efface sa position précèdente

Candystand
Candystand
Niveau 10
27 septembre 2015 à 20:29:59

Tout ce que tu as à faire, c'est de remplir un tableau de char d'espaces, sauf pour la première case qui est donc ta lettre, et toutes les x secondes, tu vas dire que la case suivante prend la lettre, et la précédente devient un espace :)

mersalaayitten
mersalaayitten
Niveau 10
27 septembre 2015 à 20:34:02

Donc je n'ai besoin que d'un tableau ? je fais un delay(1s) entre chaque cases ? Je ne vois pas cmmt faire pour dire a la case suivante de prendre la lettre et de se transformer en espaces...

Candystand
Candystand
Niveau 10
27 septembre 2015 à 20:37:04

Ca donnerait quelque chose comme:


int main()
{
char tab[10];
int i = 0;
tab = "A         "; 

while (i < 10) 
   {
       printf("==========\n");
       printf("%s\n", tab);
       printf("==========");
       if (tab[i + 1])
        {
             tab[i + 1] = 'A';
             tab[i] = ' ';
        }
        sleep(2);
        system("clear");
        i++;
   }
  return (0);
}

j'ai pas testé, à toi de me dire :)

Message édité le 27 septembre 2015 à 20:37:40 par Candystand
COS[A-B]
COS[A-B]
Niveau 10
28 septembre 2015 à 01:02:16
void printChars(char c, int nbTimes)
{
   for (int i = 0; i < nbTimes; i++)
      printf("%c", c);
}

int main(void)
{
   int lineLength = 15;
   char letter = 'A';

   for (int i = 0; i < lineLength; i++)
   {
      system("clear");

      printChars('=', lineLength);
      printf("\n");
      printChars(' ', i);
      printf("\n%c\n", letter);
      printChars('=', lineLength);
      printf("\n");

      sleep(i < lineLength-1 ? 2 : 0);
   }

   return 0;
}
COS[A-B]
COS[A-B]
Niveau 10
28 septembre 2015 à 01:11:01

Le 27 septembre 2015 à 20:37:04 Candystand a écrit :
Ca donnerait quelque chose comme:


int main()
{
char tab[10];
int i = 0;
tab = "A         "; 

while (i < 10) 
   {
       printf("==========\n");
       printf("%s\n", tab);
       printf("==========");
       if (tab[i + 1])
        {
             tab[i + 1] = 'A';
             tab[i] = ' ';
        }
        sleep(2);
        system("clear");
        i++;
   }
  return (0);
}

j'ai pas testé, à toi de me dire :)

Tu ne peux pas modifier un "string literal" comme "A ", ils sont stockés dans une partie de la mémoire en lecture seule. Par exemple

char * str = "test";
test[0] = 'a';

va renvoyer une erreur

Candystand
Candystand
Niveau 10
28 septembre 2015 à 01:21:37

Effectivement oui, à ce moment là le mieux est d'allouer dynamiquement un tableau, mais ça serait consommer de la mémoire pour trop peu :hap:

Donc ta solution est en fait la plus opti :oui:

mersalaayitten
mersalaayitten
Niveau 10
28 septembre 2015 à 06:55:22

Merci les gars :)

mersalaayitten
mersalaayitten
Niveau 10
28 septembre 2015 à 07:15:26

ça me met undefined reference to sleep alors que j'ai bien inclus la bibliotheque time, string et unistd

COS[A-B]
COS[A-B]
Niveau 10
28 septembre 2015 à 13:10:01

T'es bien sous linux ?
T'as besoin que de stdio.h stdlib.h et unistd.h

après si t'es sous windows je connais pas trop mais j’imagine qu'il faut include Windows.h et remplacer sleep(2) par Sleep(2000) et system("clear") par system("cls"), et ne pas inclure unistd.h

Candystand
Candystand
Niveau 10
28 septembre 2015 à 13:19:17

Le 28 septembre 2015 à 07:15:26 mersalaayitten a écrit :
ça me met undefined reference to sleep alors que j'ai bien inclus la bibliotheque time, string et unistd

http://stackoverflow.com/questions/8764295/undefined-reference-to-sleep-but-i-did-include-unistd-h

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment