Entrada y salida C

Cuando nos referimos a la entrada, esto significa llenar el programa con algunos datos. La entrada puede ser en forma de archivo o desde la línea de comando. El lenguaje C proporciona una serie de funciones integradas para leer una entrada determinada y completarla en el programa según sea necesario.

Cuando nos referimos a salida, significa mostrar algunos datos en la pantalla, en la impresora o en cualquier archivo. El lenguaje C proporciona una serie de funciones integradas para enviar datos a la pantalla de la computadora y guardar datos en archivos de texto o archivos binarios.

Documento estándar

El lenguaje C trata todos los dispositivos como archivos. Por tanto, los dispositivos (como las pantallas) se procesan de la misma forma que los archivos. Los siguientes tres archivos se abrirán automáticamente cuando se ejecute el programa para acceder al teclado y la pantalla.

Documento estándar Puntero de archivo equipo
Entrada estándar stdin teclado
Salida estándar stdout pantalla
Error estándar stderr pantalla
#include <stdio.h>      // 执行 printf() 函数需要该库
int main()
{
    
    
    printf("f");  //显示引号中的内容
    return 0;
}
  • Todos los programas en lenguaje C deben incluir la función main (). El código comienza a ejecutarse desde la función main ().
  • printf () se utiliza para formatear la salida a la pantalla. La función printf () se declara en el archivo de encabezado "stdio.h".
  • stdio.h es un archivo de encabezado (archivo de encabezado de entrada y salida estándar) y #include es un comando de preprocesamiento utilizado para incluir archivos de encabezado. Cuando el compilador encuentra la función printf (), si no encuentra el archivo de encabezado stdio.h, se producirá un error de compilación.
  • La declaración return 0; se usa para indicar la salida del programa.

% d entero de salida formateado

#include <stdio.h>
int main()
{
    
    
    int testInteger = 5;
    printf("Number = %d", testInteger);
    return 0;
}
  • Utilice "% d" (entero) entre las comillas de la función printf () para hacer coincidir la variable entera testInteger y mostrarla en la pantalla.

% f datos de punto flotante de salida formateados

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

Funciones getchar () y putchar ()

  • La función int getchar (void) lee el siguiente carácter disponible de la pantalla y lo devuelve como un número entero. Esta función solo leerá un solo carácter al mismo tiempo. Puede utilizar este método dentro de un bucle para leer varios caracteres de la pantalla.

  • La función int putchar (int c) envía caracteres a la pantalla y devuelve los mismos caracteres. Esta función solo generará un solo carácter al mismo tiempo. Puede utilizar este método en un bucle para mostrar varios caracteres en la pantalla.

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

Cuando se compila y ejecuta el código anterior, esperará a que ingrese algún texto.Cuando ingrese un texto y presione la tecla Enter, el programa continuará y solo leerá un solo carácter, como se muestra a continuación:

Enter a value :abc

You entered: a

Funciones scanf () y printf ()

  • La función int scanf (const char * format,…) lee la entrada del flujo de entrada estándar stdin y examina la entrada de acuerdo con el formato proporcionado.

  • La función int printf (const char * format,…) escribe la salida en el flujo de salida estándar stdout y produce la salida de acuerdo con el formato proporcionado.

El formato puede ser una cadena constante simple, pero puede especificar% s,% d,% c,% f, etc. para generar o leer cadenas, enteros, caracteres o números de coma flotante. Hay muchas otras opciones de formato disponibles, que se pueden utilizar según sea necesario. Para obtener detalles completos, puede consultar los manuales de referencia de estas funciones.

#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;
}

Cuando se compila y ejecuta el código anterior, esperará a que ingrese un texto. Cuando ingrese un texto y presione la tecla Enter, el programa continuará y leerá la entrada, como se muestra a continuación:

Enter a value :abc 123
You entered: abc 123 

Aquí, debe tenerse en cuenta que scanf () espera que el formato de entrada sea el mismo que el% sy% d que proporcionó, lo que significa que debe proporcionar una entrada válida, como "string integer", si proporciona "string cadena "o" entero entero ", se considerará una entrada incorrecta. Además, al leer una cadena, scanf () dejará de leer siempre que encuentre un espacio, por lo que "esto es prueba" son tres cadenas para scanf ().

Archivo de lectura y escritura

Un archivo, ya sea un archivo de texto o un archivo binario, representa una serie de bytes. El lenguaje C no solo proporciona funciones para acceder al nivel superior, sino que también proporciona las llamadas de la capa inferior (SO) para procesar archivos en el dispositivo de almacenamiento.

abrir un archivo

Puedes usar la función fopen () para crear un nuevo archivo o abrir un archivo existente. Esta llamada inicializará un objeto de tipo FILE. El tipo FILE contiene toda la información necesaria para controlar el flujo. Aquí está el prototipo de esta llamada a función:

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

Aquí, filename es una cadena que se usa para nombrar el archivo, y el valor del modo de acceso puede ser uno de los siguientes valores:

modo descripción
r Abra un archivo de texto existente y permita que se lea.
w Abra un archivo de texto y permita la escritura en el archivo. Si el archivo no existe, se creará un nuevo archivo. Aquí, su programa escribirá el contenido desde el principio del archivo. Si el archivo existe, se truncará a cero y se reescribirá.
un Abra un archivo de texto y escriba en el archivo en modo anexar. Si el archivo no existe, se creará un nuevo archivo. Aquí, su programa agregará contenido al contenido del archivo existente.
r + Abra un archivo de texto, permitiendo la lectura y escritura del archivo.
w + Abra un archivo de texto, permitiendo la lectura y escritura del archivo. Si el archivo ya existe, el archivo se truncará a una longitud cero, si el archivo no existe, se creará un nuevo archivo.
a + Abra un archivo de texto, permitiendo la lectura y escritura del archivo. Si el archivo no existe, se creará un nuevo archivo. La lectura comenzará desde el principio del archivo y la escritura solo se puede realizar en el modo de adjuntar.

Si está procesando un archivo binario, debe usar el siguiente modo de acceso para reemplazar el modo de acceso anterior:
"rb", "wb", "ab", "rb +", "r + b", "wb +", "w + b "," ab + "," a + b "

Cerrar el archivo

Para cerrar el archivo, use la función fclose (). El prototipo de la función es el siguiente:

 int fclose( FILE *fp );

La función fputc () escribe el valor de carácter del parámetro c en el flujo de salida al que apunta fp. Si la escritura es exitosa, devolverá el carácter escrito, si ocurre un error, devolverá EOF. Puede utilizar la siguiente función para escribir una cadena terminada en nulo en la secuencia:

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

La función fputs () escribe la cadena s en el flujo de salida apuntado por fp. Si la escritura es exitosa, devolverá un valor no negativo, si ocurre un error, devolverá EOF. También puede utilizar la función int fprintf (FILE * fp, const char * format,…) para escribir una cadena de caracteres en un archivo. Pruebe el siguiente ejemplo:
Nota: asegúrese de tener un directorio tmp utilizable. Si el directorio no existe, primero debe crearlo en su computadora.
/ tmp es generalmente un directorio temporal en un sistema Linux. Si está ejecutando en un sistema Windows, debe modificarlo a un directorio existente en el entorno local, como: 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);
}

Cuando el código anterior se compila y ejecuta, creará un nuevo archivo test.txt en el directorio / tmp y escribirá dos líneas usando dos funciones diferentes.

Leer archivo

Aquí está la función más simple para leer un solo carácter de un archivo:

int fgetc( FILE * fp );

La función fgetc () lee un carácter del archivo de entrada al que apunta fp. El valor devuelto es el carácter leído y se devuelve EOF si se produce un error. La siguiente función le permite leer una cadena de la secuencia:

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

La función fgets () lee n-1 caracteres del flujo de entrada apuntado por fp. Copiará la cadena leída en el búfer buf y agregará un carácter nulo al final para terminar la cadena.

Si esta función encuentra un carácter de nueva línea '\ n' o EOF al final del archivo antes de leer el último carácter, solo devolverá los caracteres leídos, incluido el carácter de nueva línea. También puede usar la función int fscanf (FILE * fp, const char * format,…) para leer una cadena de un archivo, pero dejará de leer cuando encuentre el primer espacio y el carácter de nueva línea.

#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);
 
}

Cuando se compila y ejecuta el código anterior, leerá el archivo creado en la parte anterior y producirá los siguientes resultados:

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

3: This is testing for fputs...

Primero, el método fscanf () solo lee This, porque encontró un espacio después de él. En segundo lugar, llame a fgets () para leer la parte restante hasta el final de la línea. Finalmente, llame a fgets () para leer la segunda línea por completo.

Función de E / S binaria

Las dos funciones siguientes se utilizan para entrada y salida binarias:

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);

Ambas funciones se utilizan para leer y escribir bloques de almacenamiento, generalmente matrices o estructuras.

Supongo que te gusta

Origin blog.csdn.net/yasuofenglei/article/details/107813583
Recomendado
Clasificación