Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec création de tableau de caractère

Sujet résolu
19 juillet 2019 à 2:17:15

#include <stdio.h>

int main (void) {
	char t[5];

	for(int i = 0 ; i < 5 ; i++){
		printf("Entrez le caractere dans t[%d] :",i);
		scanf("%c",(t+i));
	}

	printf("\n");

	for(int i = 0 ; i < 5 ; i++){
		printf("t[%d] :%c",i,*(t+i));:
	}

	return(0);
}

Bonjour ^^ ,
Bon ,je sais que si on veut enregistrer un mot on doit faire un scanf("%s",t) en prévoyant un emplacement en plus pour le '\0'.
Mais moi je veux pas faire un mot, je veux littéralement juste faire un tableau de caractère .Sauf que quand je lance le programme que
vous pouvez voir (je précise qu'il n'y a pas d'erreur à la compilation) ça bug d'une manière étrange :


Quand je suis au début ça a l'aire de fonctionner ,sauf que quand normalement il doit me demander de rentrer la deuxième valeur ,
Il m'affiche le texte que j'avais dis d'afficher mais il saute le scanf et du coup ça passe tout de suite au troisième :( .
Je sens qu'on va me crier dessus car surement c'est une erreur de débutant (en même temps je le suis hein xD).
Mais là, jvois vraiment pas :(. Help pleas.
Merci

-
Edité par Ocarina588 19 juillet 2019 à 2:22:54

  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 8:17:43

Quand tu tapes  :  a  [entree]

ça fait deux caractères : le a, et le saut de ligne.

Fais afficher leur valeur numérique (%d) pour mieux voir.

-
Edité par michelbillaud 19 juillet 2019 à 10:21:50

  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 8:24:24

Salut,

Une solution serait d'insérer un espace avant le signe % dans ton scanf afin d'ignorer les caractères résiduels

scanf(" %c",(t+i));

En l'état, la ligne 14 ne compilera pas

  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 10:27:46

En fait il n'y a pas de solution, tant qu'il n'y a pas un objectif clairement défini pour ce que le code devrait faire et qu'il ne fait pas.

Le problème énoncé, c'est :

> je veux littéralement juste faire un tableau de caractère .

Bon, "faire un tableau", c'est la ligne 4, et c'est réglé : char t[5].


Maintenant, si le problème c'est : "je veux remplir le tableau en posant à l'utilisateur une question pour chaque caractère", c'est une autre histoire.


  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 10:59:33

Salut,

Pour rajouter aux remarques des autres, au lieu d'écrire :

        scanf("%c",(t+i));

Tu pourrais écrire :

        scanf("%c", &(t[i]));

Mais c'est équivalent vu que t[i] c'est *(t+i)


-
Edité par potterman28wxcv 19 juillet 2019 à 11:00:11

  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 13:25:35

Merci énormément :ange:. Ca fonctionne :).

Je met donc le sujet en résolu.

Mais si vous avez le temps, pourriez vous m'expliquer ce qui se passe quand je met un espace avant le %c? 

Car ça marche mais je comprend pas pourquoi .

Merci ^^.

-
Edité par Ocarina588 19 juillet 2019 à 13:29:31

  • Partager sur Facebook
  • Partager sur Twitter
19 juillet 2019 à 14:17:16

Ocarina588 a écrit:

Mais si vous avez le temps, pourriez vous m'expliquer ce qui se passe quand je met un espace avant le %c? 

Car ça marche mais je comprend pas pourquoi .

Une explication simple : si tu ne comprends pas, c'est parce que tu ne lis pas le manuel.

http://manpagesfr.free.fr/man/man3/scanf.3.html

<<

La chaîne format consiste en une séquence de directives qui décrit comme traiter la séquence des caractères d'entrée. [...]

Une directive peut être :

* Une séquence de caractères blancs (espace, tabulation, nouvelle ligne, etc. ; voir isspace(3)). Cette directive correspond à un nombre quelconque de caractères blancs, y compris aucun, dans l'entrée.

>>

-
Edité par michelbillaud 19 juillet 2019 à 14:18:23

  • Partager sur Facebook
  • Partager sur Twitter