Taz bisounours-codeur | bon, je me barre, je veux pas que ça dévie, voici une solution
Code :
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- typedef char* Ligne[3];
- static const char* SEP=" \t";
- int main()
- {
- Ligne *tableau = NULL;
- size_t max = 0;
- size_t i=0;
- char buffer[128];
-
- /* sur le forum, on peux trouver le code de la fonction getline
- disponible sur certains systèmes qui permet de s'affranchir
- de la longueur de la ligne en entrée */
- for(i=0; fgets(buffer, sizeof buffer, stdin) != NULL; ++i)
- {
- /* on agrandit le tableau s'il le faut */
- if( i == max )
- {
- max= 2*max+1;
- tableau = realloc(tableau, max * sizeof *tableau);
- }
- {
- size_t j=0;
- char *p = NULL;
- /* on enlève le \n final s'il est présent */
- p= strrchr(buffer, '\n');
- if(p!=NULL)
- {
- *p = '\0';
- }
- /* on trouve les 2 premiers mots et on les range dans le tableau */
- for( j=0, p=strtok(buffer, SEP); p!=NULL && j!=2; p=strtok(NULL, SEP), ++j)
- {
- tableau[i][j] = malloc(strlen(p) +1);
- strcpy(tableau[i][j], p);
- }
- /* le troisième est vide, on le mets à NULL */
- tableau[i][2]= NULL;
- }
- }
- /* affichage et nettoyage */
- {
- size_t j=0;
- for( j=0; j!=i; ++j)
- {
- printf("%u - %s - %s\n", j, tableau[j][0], tableau[j][1]);
- free(tableau[j][0]);
- free(tableau[j][1]);
- }
-
- free(tableau);
- }
- return 0;
- }
|
|