Entrée et sortie C

Lorsque nous nous référons à l'entrée, cela signifie remplir le programme avec des données. L'entrée peut être sous la forme d'un fichier ou à partir de la ligne de commande. Le langage C fournit une série de fonctions intégrées pour lire une entrée donnée et la remplir dans le programme si nécessaire.

Lorsque nous parlons de sortie, cela signifie afficher certaines données à l'écran, sur l'imprimante ou dans n'importe quel fichier. Le langage C fournit une série de fonctions intégrées pour générer des données sur l'écran de l'ordinateur et enregistrer des données dans des fichiers texte ou des fichiers binaires.

Document standard

Le langage C traite tous les périphériques comme des fichiers. Ainsi, les périphériques (tels que les écrans) sont traités de la même manière que les fichiers. Les trois fichiers suivants seront automatiquement ouverts lors de l'exécution du programme afin d'accéder au clavier et à l'écran.

Document standard Pointeur de fichier équipement
Entrée standard stdin clavier
Sortie standard stdout écran
Erreur standard stderr écran
#include <stdio.h>      // 执行 printf() 函数需要该库
int main()
{
    
    
    printf("f");  //显示引号中的内容
    return 0;
}
  • Tous les programmes en langage C doivent inclure la fonction main (). Le code démarre l'exécution à partir de la fonction main ().
  • printf () est utilisé pour formater la sortie à l'écran. La fonction printf () est déclarée dans le fichier d'en-tête "stdio.h".
  • stdio.h est un fichier d'en-tête (fichier d'en-tête d'entrée et de sortie standard) et #include est une commande de prétraitement utilisée pour inclure des fichiers d'en-tête. Lorsque le compilateur rencontre la fonction printf (), s'il ne trouve pas le fichier d'en-tête stdio.h, une erreur de compilation se produit.
  • L'instruction return 0; est utilisée pour indiquer la sortie du programme.

% d entier de sortie formaté

#include <stdio.h>
int main()
{
    
    
    int testInteger = 5;
    printf("Number = %d", testInteger);
    return 0;
}
  • Utilisez «% d» (entier) entre les guillemets de la fonction printf () pour faire correspondre la variable entière testInteger et la sortie à l'écran.

Données en virgule flottante de sortie formatées% f

#include <stdio.h>
int main()
{
    
    
    float f;
    printf("Enter a number: ");
    // %f 匹配浮点型数据
    scanf("%f",&f);
    printf("Value = %f", f);
    return 0;
}

Fonctions getchar () et putchar ()

  • La fonction int getchar (void) lit le prochain caractère disponible à l'écran et le renvoie sous forme d'entier. Cette fonction ne lira qu'un seul caractère à la fois. Vous pouvez utiliser cette méthode dans une boucle pour lire plusieurs caractères à l'écran.

  • La fonction int putchar (int c) renvoie des caractères à l'écran et renvoie les mêmes caractères. Cette fonction ne sortira qu'un seul caractère à la fois. Vous pouvez utiliser cette méthode dans une boucle pour afficher plusieurs caractères à l'écran.

#include <stdio.h>
 
int main( )
{
    
    
   int c;
 
   printf( "Enter a value :");
   c = getchar( );
 
   printf( "\nYou entered: ");
   putchar( c );
   printf( "\n");
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il attend que vous saisissiez du texte. Lorsque vous entrez un texte et appuyez sur la touche Entrée, le programme continue et ne lit qu'un seul caractère, comme indiqué ci-dessous:

Enter a value :abc

You entered: a

fonctions scanf () et printf ()

  • La fonction int scanf (const char * format,…) lit l'entrée à partir du flux d'entrée standard stdin et parcourt l'entrée selon le format fourni.

  • La fonction int printf (const char * format,…) écrit la sortie dans le flux de sortie standard stdout et produit la sortie selon le format fourni.

le format peut être une simple chaîne constante, mais vous pouvez spécifier% s,% d,% c,% f, etc. pour afficher ou lire respectivement des chaînes, des entiers, des caractères ou des nombres à virgule flottante. Il existe de nombreuses autres options de format disponibles, qui peuvent être utilisées selon les besoins. Pour plus de détails, vous pouvez consulter les manuels de référence de ces fonctions.

#include <stdio.h>
int main( ) {
    
    
 
   char str[100];
   int i;
 
   printf( "Enter a value :");
   scanf("%s %d", str, &i);
 
   printf( "\nYou entered: %s %d ", str, i);
   printf("\n");
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il attend que vous saisissiez du texte. Lorsque vous saisissez un texte et appuyez sur la touche Entrée, le programme continue et lit l'entrée, comme indiqué ci-dessous:

Enter a value :abc 123
You entered: abc 123 

Ici, il convient de noter que scanf () s'attend à ce que le format d'entrée soit le même que les% s et% d que vous avez donnés, ce qui signifie que vous devez fournir une entrée valide, telle que "string integer", si vous fournissez "string string "ou" integer integer ", il sera considéré comme une entrée incorrecte. De plus, lors de la lecture d'une chaîne, scanf () arrêtera la lecture tant qu'elle rencontre un espace, donc "this is test" correspond à trois chaînes pour scanf ().

Fichier lu et écrit

Un fichier, qu'il s'agisse d'un fichier texte ou d'un fichier binaire, représente une série d'octets. Le langage C fournit non seulement des fonctions pour accéder au niveau supérieur, mais fournit également les appels de couche inférieure (OS) pour traiter les fichiers sur le périphérique de stockage.

ouvrir un fichier

Vous pouvez utiliser la fonction fopen () pour créer un nouveau fichier ou ouvrir un fichier existant. Cet appel initialisera un objet de type FILE. Le type FILE contient toutes les informations nécessaires pour contrôler le flux. Voici le prototype de cet appel de fonction:

FILE *fopen( const char * filename, const char * mode );

Ici, filename est une chaîne utilisée pour nommer le fichier, et la valeur du mode de mode d'accès peut être l'une des valeurs suivantes:

mode la description
r Ouvrez un fichier texte existant et autorisez la lecture du fichier.
w Ouvrez un fichier texte et autorisez l'écriture dans le fichier. Si le fichier n'existe pas, un nouveau fichier sera créé. Ici, votre programme écrira le contenu depuis le début du fichier. Si le fichier existe, il sera tronqué à zéro et réécrit.
une Ouvrez un fichier texte et écrivez dans le fichier en mode ajout. Si le fichier n'existe pas, un nouveau fichier sera créé. Ici, votre programme ajoutera du contenu au contenu du fichier existant.
r + Ouvrez un fichier texte, permettant la lecture et l'écriture du fichier.
w + Ouvrez un fichier texte, permettant la lecture et l'écriture du fichier. Si le fichier existe déjà, le fichier sera tronqué à une longueur nulle, si le fichier n'existe pas, un nouveau fichier sera créé.
un + Ouvrez un fichier texte, permettant la lecture et l'écriture du fichier. Si le fichier n'existe pas, un nouveau fichier sera créé. La lecture commencera au début du fichier et l'écriture ne pourra se faire qu'en mode ajout.

Si vous traitez un fichier binaire, vous devez utiliser le mode d'accès suivant pour remplacer le mode d'accès ci-dessus:
"rb", "wb", "ab", "rb +", "r + b", "wb +", "w + b "," ab + "," a + b "

Fermer le fichier

Pour fermer le fichier, utilisez la fonction fclose (). Le prototype de la fonction est le suivant:

 int fclose( FILE *fp );

La fonction fputc () écrit la valeur de caractère du paramètre c dans le flux de sortie pointé par fp. Si l'écriture réussit, il renverra le caractère écrit, si une erreur se produit, il renverra EOF. Vous pouvez utiliser la fonction suivante pour écrire une chaîne terminée par null dans le flux:

int fputs( const char *s, FILE *fp );

La fonction fputs () écrit la chaîne s dans le flux de sortie pointé par fp. Si l'écriture réussit, elle retournera une valeur non négative, si une erreur se produit, elle retournera EOF. Vous pouvez également utiliser la fonction int fprintf (FILE * fp, const char * format,…) pour écrire une chaîne de caractères dans un fichier. Essayez l'exemple suivant:
Remarque: assurez-vous que vous disposez d'un répertoire tmp utilisable. Si le répertoire n'existe pas, vous devez d'abord le créer sur votre ordinateur.
/ tmp est généralement un répertoire temporaire sur un système Linux. Si vous utilisez un système Windows, vous devez le modifier dans un répertoire existant dans l'environnement local, tel que: C: \ tmp, D: \ tmp, etc.

#include <stdio.h>
 
int main()
{
    
    
   FILE *fp = NULL;
 
   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Lorsque le code ci-dessus est compilé et exécuté, il créera un nouveau fichier test.txt dans le répertoire / tmp et écrira deux lignes en utilisant deux fonctions différentes.

Lire le fichier

Voici la fonction la plus simple pour lire un seul caractère à partir d'un fichier:

int fgetc( FILE * fp );

La fonction fgetc () lit un caractère dans le fichier d'entrée pointé par fp. La valeur de retour est le caractère lu et EOF est renvoyé si une erreur se produit. La fonction suivante vous permet de lire une chaîne du flux:

char *fgets( char *buf, int n, FILE *fp );

La fonction fgets () lit n-1 caractères dans le flux d'entrée pointé par fp. Il copiera la chaîne de lecture dans le tampon buf et ajoutera un caractère nul à la fin pour terminer la chaîne.

Si cette fonction rencontre un caractère de nouvelle ligne '\ n' ou EOF à la fin du fichier avant de lire le dernier caractère, elle ne retournera que les caractères lus, y compris le caractère de nouvelle ligne. Vous pouvez également utiliser la fonction int fscanf (FILE * fp, const char * format,…) pour lire une chaîne à partir d'un fichier, mais elle arrêtera la lecture quand elle rencontrera le premier espace et le caractère de nouvelle ligne.

#include <stdio.h>
 
int main()
{
    
    
   FILE *fp = NULL;
   char buff[255];
 
   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1: %s\n", buff );
 
   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
 
}

Lorsque le code ci-dessus est compilé et exécuté, il lira le fichier créé dans la partie précédente et produira les résultats suivants:

1: This
2: is testing for fprintf...

3: This is testing for fputs...

Tout d'abord, la méthode fscanf () ne lit que This, car elle a rencontré un espace après lui. Deuxièmement, appelez fgets () pour lire la partie restante jusqu'à la fin de la ligne. Enfin, appelez fgets () pour lire complètement la deuxième ligne.

Fonction d'E / S binaire

Les deux fonctions suivantes sont utilisées pour l'entrée et la sortie binaires:

size_t fread(void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);

Ces deux fonctions sont utilisées pour lire et écrire des blocs de tableaux ou de structures de stockage généralement.

Je suppose que tu aimes

Origine blog.csdn.net/yasuofenglei/article/details/107813583
conseillé
Classement