tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

[IniC] TP 5

Date de première publication : 2024/09/19

Si vous avez débuté le C, cette année, cet énoncé est pour vous. Dans le cas contraire, il faut aller au TP suivant

Vérification des codes donnés en cours

Vérifiez le comportement des codes donnés en cours. Comprendre et mémoriser ce qui se passe.

int a;

void f1(float a)
{
   printf("%f\n", a);
}

void main() 
{
  a = 3;
  f1(2.000);
  printf("%d\n", a);
}

Les suivants concernent la manière dont les paramètres sont passés aux fonctions.

int a;

void f1(int a)
{
   a=2;
}

void main() 
{
  a = 3;
  f1(a);
  printf("%d", a);
}
int a;

void f1(int t[])
{
   t[1]=2;
}

void main() 
{
  int t[10] = {0}
  printf("%d", t[1]);
  f1(t);
  printf("%d", t[1]);
}

Manipulation de fichiers texte

Écrire un fichier

Voici le code expliqué en cours :

int main() 
{
  FILE * fichier; /* désolé !!! */
  char nom[20] = "toto.txt";

  fichier = fopen(nom, "w"); /* ouverture en écriture */
  
  if (fichier==0) 
  {
     printf("Probleme a l'ouverture\n");
     // devrait etre ecrit sur la sortie standard
  }
  else 
  {
     fprintf(fichier, "%s\n", nom);
     /* meme utilisation que printf */
     fclose(fichier);
  }
  return 0;
}

Reprenez ce code, ajoutez les entêtes corrects et modifiez-le pour réaliser les tâches suivantes :

  1. demander à l'utilisateur un nombre n puis demander n nombres qu'il faudra écrire dans un fichier.
  2. saisir au clavier un "chaine de caractères". Si cette chaîne est différente de "FIN", inscrire la chaine dans un fichier.

On peut écrire sur la sortie standard (stdout) ou la sortie d'erreur standard (stderr) comme suit :


printf("sortie standard");
fprintf(stdout, "sortie standard aussi");
fprintf(stderr, "sortie standard d'erreur cette fois");

Lire un fichier

Reprenons le code vu en cours :


int main() {
  FILE * fichier;
  char nom[20] = "toto.txt";
  char temp[255];

  fichier = fopen(nom, "r"); /* lecture */
  if (fichier==0) 
     printf("Problème à l'ouverture");
  else {
     fscanf(fichier, "%s", temp);
     while(!feof(fichier)) {
        printf("%s", temp);
        fscanf(fichier, "%s", temp);
     }
     fclose(fichier);
  }
  return 0;
}
  1. lire le fichier contenant des nombres, afficher la somme de ces nombres.
  2. modifier le code pour afficher les erreurs sur la sortie d'erreur standard, essayer avec un le nom d'un fichier qui n'existe pas et valider l'opération avec un redirection d'erreur UNIX à l'exécution.
  3. lire le ficher contenant les mots et les afficher sur la sortie standard.

Pour la lecture, vous allez être confrontés à la fin de fichier : est-ce que votre fichier contient une ligne vide ou pas. Pour une détection correcte, on regarde souventle résultat de l'appel de la fonction fscanf()

Elargir la base de mots du jeu du pendu


char base_mots[100][60];
int nb_mots = 0;

strcpy(base_mots[nb_mots++], "PREMIER");

Le mot à chercher pour le pendu sera donné par un indice dans ce "tableau" de chaines de caractères

A vous la suite