Bonjour,

J'ai codé un programme pour insérer un caractère dans un tableau de caractères, mais ça me tronque la dernière lettre du tableau. Pourtant je rajoute un caractère vide à la fin du tableau avant de faire l'insertion :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define NMAX 50
 
void gen_aleat( char v[], int n )
{
 int i;
 /* rand() retourne un entier aléatoire de l'ens {0,1,2,..,RAND_MAX} (RAND_MAX fixé à 32767 sous VC++)*/
 for(i = 0; i < n; i++) v[i] = rand()%(122-97) +97;/* pour avoir aussi des nbrs<0 */
}
 
void aff_vect( char v[], int n )
{
 int i;
 for( i = 0; i < n; i++ )
 {
	 printf( "%c", v[i] );
     if ( (i+1) % 10 == 0 ) printf( "\n" );
 }
 printf( "\n" );
}
 
void insere (char v[],int n, int e, int ind)
{
    int i;
 
    i = n-2;
    while (i >= ind)
    {
        v[i+1]=v[i];
        i=i-1;
    }
    v[ind]=e;
}
 
int main()
{
    char v[NMAX];
    int n;
    int ok;
    char e;
    int ind;
 
    srand(time(NULL));
 
    do
    {
     printf( "Entrer le nb d'elements du vecteur ( <= %d ) : ", NMAX );
     ok = scanf( "%d", &n );
	 while( getchar( ) != '\n' );  /* ou fgets(vb,80,stdin)  avec  char vb[81];  */
   }while( !ok || n < 0 || n > NMAX );
 
    gen_aleat( v, n );
    printf( "Voici le tableau genere :\n" );
    aff_vect( v, n );
 
    v[n]=' ';
 
    printf("Entrer le caractere a inserer : ");
    scanf( "%c", &e );
    while( getchar( ) != '\n' );
 
    do
    {
        printf("Entrer l'indice ou vous voulez inserer l'element : ");
        ok = scanf( "%d", &ind );
        while( getchar( ) != '\n' );
    } while (!ok || ind < 0 || ind >= n);
 
    printf("Voici le tableau genere apres insertion : \n");
    insere(v,n,e,ind);
    aff_vect( v, n );
 
    return 0;
}