" fflush (stdin);" n'existe pas. fflush(), n'est défini que pour les flux sortants...
L'usage correct de scanf() est délicat. Il faut vider le flux entrant si le dernier caractère lu n'est pas '\n' :
static void purge(void)
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
{
}
}
Cette fonction doit être appelée après chaque usage de scanf() avec "%d" et "%s", par exemple. Pour "%c", uniquement si le dernier caractère lu n'est pas '\n'...
On est aussi censés tester la valeur retournée par scanf(). Elle indique le nombre de conversions réussies. En cas d'erreur, il y a un traitement à faire...
Idem avec getchar()...
getch() n'est pas standard.
Cette condition
valide = (nombre == BORNE1 || nombre <= BORNE2);
est redondante et ne teste pas la limite basse. Il faut que la vaieur soit >= à 1 et <= à 20, ce qui se code autrement, (je te laisse trouver, tout est dit ...). attention les bornes sont donc 1 et 20 et non 0 et 20 ...
Il y a un autre problème de logique. Si je mets 21, j'ai bien l'indication 'hors limite', mais le triangle est quand même dessiné... Il doit falloir un else au if ...
Une fois corrigé, ça a l'air de fonctionner correctement ...
Entrez un nombre de 1 a 20:21
Vous etes hors limite recommencer
Voulez-vous continuer?O/N
o
Entrez un nombre de 1 a 20:0
Vous etes hors limite recommencer
Voulez-vous continuer?O/N
o
Entrez un nombre de 1 a 20:5
12345
2345
345
45
5
Voulez-vous continuer?O/N
n
Appuyer sur une touche pour continuer
Process returned 0 (0x0) execution time : 18.956 s
Press any key to continue.
Code à ne regarder que si tu es planté ou pour vérifier:
#include <stdio.h>
#include <string.h>
static void purge (void)
{
int c;
while ((c = getchar ()) != '\n' && c != EOF)
{
}
}
int main (void)
{
const int BORNE1 = 1;
/* Declaration des caractere */
const int BORNE2 = 20;
int ligne, col;
int nombre, valide;
char reponse;
/* ligne et colone*/
do
/* Utilisation de la boucle do..while" */
{
/* Choix de nombre par l'utilisateur */
printf ("Entrez un nombre de 1 a 20:");
/* Deposer la valeur demander a l'utilisateur */
scanf ("%d", &nombre);
purge ();
/* Definir la zone de fabrication du triangle permise*/
valide = nombre >= BORNE1 && nombre <= BORNE2;
if (!valide)
printf ("Vous etes hors limite recommencer\n");
else
{
/* Utilisation de for pour choisir les caractere numerique des ligne */
for (ligne = 1; ligne <= nombre; ligne++)
/* initialisation */
{
/* pour colonne varie de ligne jusqu'à 20 ou selon le nombre de depart choisi */
for (col = ligne; col <= nombre; col++)
printf ("%d", col);
printf ("\n");
/* Marque la fin dela boucle do*/
}
}
/* Serie d'operation pour permettre a la boucle de se refaire */
printf ("Voulez-vous continuer?O/N\n");
scanf ("%c", &reponse);
if (reponse != '\n')
{
purge ();
}
reponse = toupper (reponse);
}
while (reponse == 'O');
printf ("Appuyer sur une touche pour continuer");
/* Instrution pour un seul caractere */
{
int c = getchar ();
if (c != '\n')
{
purge ();
}
}
return 0;
}