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
19 octobre 2015 à 17:11:55

Bonjour, à la suite de ce topic (http://www.jeuxvideo.com/forums/42-47-41266654-1-0-1-0-c-deplacement-d-un-char.htm) je cherche à déplacer un charactère à l'aide d'un tableaux :
Genre, je commence ici :

===============
A
===============

Et a la fin de mon prog j'obtiens ça :

===============
------------------------A
===============

(sans les tirets), j'ai le programme fait à l'aide des boucles sauf que je n'arrive pas avec les tableaux.

Mon code à l'aide de boucles
void printChars (int c, int nbTimes) { int i = 0; for (i = 0; i < nbTimes; i++) { printf("%c", c); } } /* int main () { int lineLenght = 15; char letter = 'A'; int i = 0; for (i = 0; i < lineLenght; i++) { system ("clear"); printChars ('=', lineLenght); printf("\n"); printChars (' ', i); printf("%c\n", letter); printChars ('=', lineLenght); printf("\n"); sleep (1); } return 0; } */

Mon code avec un tab :

int main () {
	
	char tab [15] = {0};
	tab [0] = 'A';
	int i = 0;
	
	printChars ('=', 15);
	printf("\n");
	
	for (i = 0; i < 15; i++) {
		printf("%c ", tab[i]);
		
		if (tab [i+1]) {
			tab [i+1] = 'A';
			tab [i] = ' ';
		}
		
		sleep (1);
		system ("clear");
	}
	printf("\n");
	
	printChars ('=', 15);
	printf("\n");
	
	return 0;
}

Si vous pouvez m'aider merci :)

Candystand
Candystand
Niveau 10
19 octobre 2015 à 18:07:41

Pour les tableaux, utilise l'allocation dynamique

mersalaayitten
mersalaayitten
Niveau 10
19 octobre 2015 à 18:25:46

Salut, donc j'ai ça :

int main () {
	
	char (*tab) [15] = malloc (sizeof (*tab));
	(*tab)  [0] = 'A';
	int i = 0;
	
	while (i < 15) {
		printChars ('=', 15);
		printf("\n");
		
		printf("%c", (*tab)[i]);
		if ((*tab) [i+1]) {
			(*tab)  [i+1] = 'A';
			(*tab)  [i] = ' ';
			
			i++;
		}
		printf("\n");
	
		printChars ('=', 15);
		printf("\n");
		
		sleep (1);
		system ("clear");
	}
	
	free (tab);
	
	return 0;
}

Mon terminale s'actualise mais ma lettre n'avance pas :/

SalutBobby
SalutBobby
Niveau 6
19 octobre 2015 à 18:51:09

Salut, là tu n'as pas alloué dynamiquement:
char (*tab) [15] = malloc (sizeof (*tab));
(*tab) [0] = 'A';
Ça ne veut rien dire ^^
Mais bon c'est pas important, tu peux juste faire:
char tab[15] = " "; tab[0] = 'A'; char c = tab[0]; for (int i = 1; i < 14; i ++) { tab[i] = '-'; } tab[14] = c;

et ensuite :
printf("%s", tab);

Message édité le 19 octobre 2015 à 18:53:38 par SalutBobby
mersalaayitten
mersalaayitten
Niveau 10
19 octobre 2015 à 19:05:49

En faite je voulais obtenir chaque étapes sans les (-) comme :

======
A
======

puis

======
-A
======

pour obtenir a la fin :

======
---------A
======

SalutBobby
SalutBobby
Niveau 6
19 octobre 2015 à 19:14:53

dac, alors comme ça:

char tab[15] = " ";
for (int i = 0; i < 14; i ++)
{
tab[i] = 'A';
tab[i+1] = '\0';
tab[i] = '-';
printf("%s", tab);
}

Ce code la va te décaler et t'afficher le A après tu rajoutes la déco en dessous et au dessus et c'est bon

Message édité le 19 octobre 2015 à 19:16:04 par SalutBobby
mersalaayitten
mersalaayitten
Niveau 10
19 octobre 2015 à 19:39:48
int main () {
	
	char tab [15] = {0};
	tab [0] = 'A';
	int i = 0;
	
	for (i = 0; i < 15; i++) {
		system ("clear");
		
		printChars ('=', 15);
		printf("\n");
		printf("%c\n", tab[i]);
		printChars ('=', 15);
		printf("\n");
		
		if (tab [i+1]) {
			tab  [i+1] = 'A';
			tab  [i] = ' ';
		} 
		
		sleep (1);
	}
	
	return 0;
}

Ce code devrait fonctionner non ? je comprend pas car j'obtient :

=====
A
=====

et ensuite

======

======

Mon A disparait alors que je lui dit tab[i+1] = A

SalutBobby
SalutBobby
Niveau 6
19 octobre 2015 à 19:42:52

c'est normal car :
if (tab [i+1]) {
tab [i+1] = 'A';
tab [i] = ' ';
ne veut rien dire, tab[i+1] n'est pas un booléen, donc la condition n'est jamais remplie

mersalaayitten
mersalaayitten
Niveau 10
19 octobre 2015 à 19:51:43

Je le remplace par quoi ? :hap: je débute ^^

SalutBobby
SalutBobby
Niveau 6
19 octobre 2015 à 19:59:27

tu enlèves ton if, pour mettre ce qu'il y avait dans ton if dans le for. Et tu changes i < 15 par i < 14 car sinon ton i+1 va créer un bug

mersalaayitten
mersalaayitten
Niveau 10
20 octobre 2015 à 12:40:25
void printChars(char c, int nbTimes)
{
   for (int i = 0; i < nbTimes; i++)
      printf("%c", c);
}
  
int main () {
      
    char tab [15] = {0};
    tab [0] = 'A';
    int i = 0;
      
    for (i = 0; i < 15; i++) {
        system ("clear");
          
        printChars ('=', 15);
        printf("\n");
        printf("%c\n", tab[i]);
        printChars ('=', 15);
        printf("\n");
          
        if (tab [i] == 'A' && tab [i+1] != '\0') {
            tab  [i+1] = 'A';
            tab  [i] = ' ';
        }
          
        sleep (1);
    }
      
    return 0;
}

Vous aurez une idée ? ça marche toujours pas :/

LechatRAMBO
LechatRAMBO
Niveau 10
21 octobre 2015 à 00:08:05

Lorsque tu affiches ton tableau, tu affiches seulement ton caractère.
A chaque tour de boucle, tu modifie la position dans le tableau, mais pas dans la console.

=>tu affiches à chaque tour de boucle la nouvelle position du tableau au même endroit dans la console.

Pour pouvoir afficher une version actualisé, tu a besoin d'une deuxième boucle qui s'occupe de l'affichage des espaces.


for(j=0; j<i; j++)
{
    putchar(' ');
}

Solution :
<spoil>


void printChars(char c, int nbTimes)
{
  int i;
   for (i = 0; i < nbTimes; i++)
      printf("%c", c);
}
  
int main () {
      
    char tab [15] = {0};
    tab [0] = 'A';
    int i = 0,j=0;
      
    for (i = 0; i < 15; i++) {
        //system ("clear");
          
        printChars ('=', 15);
        printf("\n");
        for(j=0; j<i; j++)
        putchar(' ');
        printf("%c\n", tab[i]);
        printChars ('=', 15);
        printf("\n");
          
        tab  [i+1] = 'A';
        tab  [i] = ' ';
        sleep (1);
        }
          
        
        
    return 0;
}

</spoil>

Message édité le 21 octobre 2015 à 00:12:47 par LechatRAMBO
mersalaayitten
mersalaayitten
Niveau 10
21 octobre 2015 à 10:22:51

Merci bcp :)

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