Ben plutôt que d'utiliser une boucle, t'utilises le masque d'affichage %*[^\n]
En gros ton scanf sera :
scanf("%*[^\n]",chaine);
Ou alors tu utilises le gets(chaine) ou fgets.
Je te mets un exemple dans un programme qui lit une chaîne de caractère ch et détermine la longueur de la chaîne avec un pointeur pt et le programme n'utilise pas de variables numériques.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch[101]; // déclaration du tableau ch de type char avec possibilité d'insérer 100 caractères, on prévoit aussi 1 espace supplémentaire pour la \0
char *pt; // déclaration du pointeur pt de type char
scanf("%*[^\n]",ch); //ou gets(ch); // lecture de la chaine de caractère
//scanf ("%s",ch); // --> Mauvais car impossible d'insérer des espaces
pt=ch; // le contenu de pt est l'adresse de la chaîne (du 1er élément)
for(pt=ch;*pt;pt++); // boucle avec initialisation de pt à ch, faire tant que *pt est différent de 0 (car à la fin des chaînes de caractères se glisse un \0), et on incrémente pt de 1
printf("%d",pt-ch); // affichage du nombre d'élément grâce à la soustraction de pt - ch
return(0);
}
Par contre j'ai un petit problème avec le scanf car quand j'utilise le scanf à la place de gets ou le %s il me met tout le temps 15 -_-