Xi'an Petroleum University C ++ computadora experimento computadora seis diseño de programa de flujo de entrada y salida

Programación de flujo de seis entradas y salidas por computadora

1. El propósito del embarque

1. Comprender la estructura de la biblioteca de clases de flujo de C++.

2. Domine los métodos de uso de las clases de uso común y sus funciones de miembro en la biblioteca de clases de flujo.

3. Comprenda el uso de caracteres de control comunes y domine los métodos de entrada y salida del formato C++.

4. Competencia en métodos de operación de archivos y entrada y salida de flujos de archivos.

2. Contenido a bordo

1. Pruebe los ejemplos de este capítulo.

2. Diseñe una clase de estudiante, escriba la información básica (nombre, altura, edad) de N objetos de estudiante en un archivo en forma de secuencia binaria y muestre aleatoriamente la información del archivo escrito en la pantalla

ejemplo de prueba

[Ejemplo 9.9] Acceso aleatorio a archivos. Requisitos:
(1) Diseñar una estructura de estudiantes que incluya el nombre, la identificación del estudiante y las calificaciones.
(2) Escriba primero los datos de 3 estudiantes en el archivo bbb.dat, luego lea los datos del segundo estudiante del archivo
y muéstrelos en la pantalla.
Pasos en la computadora:
(1) Cree un nuevo archivo de encabezado de plantilla de clase plural. Seleccione el menú "Archivo" - "Nuevo" para abrir el nuevo cuadro de diálogo,
como se muestra en la Figura 5-1. Seleccione "Archivo de encabezado C/C++" en la pestaña "Archivos", establezca la ruta de almacenamiento en
"D:\mitrabajo\trabajo6" y el nombre del archivo en "Estudiante". De manera predeterminada, se selecciona "Agregar al proyecto", como
se muestra en la Figura 6-4.

2)单击“OK”按钮,打开 Student.h 文件,编辑代码如下:
//Student.h
struct Student{
    
    
char name[20];
long number;
int score;
};3)在主文件中 work6.cpp 中编辑测试代码:
#include "Student.h"
#include <fstream.h>
int main(int argc, char* argv[])
{
    
    
Student stu[3] = {
    
    {
    
    "Zhang", 111, 100}, {
    
    "Li", 222, 90}, {
    
    "Wang", 333, 80}}, 
stu2;
char filename[] = "bbb.data";
int n=3, i;
fstream datafile(filename, ios::in|ios::out|ios::binary);
for(i=0; i<3; i++)
datafile.write((char*)&stu[i], sizeof(struct Student));
datafile.seekg(1*sizeof(struct Student), ios::beg);
datafile.read((char*)&stu2, sizeof(struct Student));
datafile.close();
64
cout<<"Name: "<<stu2.name<<endl;
cout<<"Number: "<<stu2.number<<endl;
cout<<"score: "<<stu2.score<<endl;
return 0;
}

(4) Haga clic en el icono de comando "Generar" en la barra de herramientas para generar work6.exe.
(5) Haga clic en el icono de comando "Ejecutar" en la barra de herramientas para ejecutar work6.exe,

  1. Práctica práctica
    Diseñe una clase de estudiantes, escriba la información básica (nombre, altura, edad) de N objetos de estudiantes en un archivo en forma de secuencia binaria y muestre aleatoriamente la información escrita del archivo en la pantalla.

Pasos a bordo:

(1) Cree un nuevo archivo de encabezado de plantilla de clase plural. Seleccione el menú "Archivo" - "Nuevo" para abrir el nuevo cuadro de diálogo, como se muestra en la Figura 6-6. Seleccione "Archivo de encabezado C/C++" en la pestaña "Archivos", establezca la ruta de almacenamiento en "D:\mitrabajo\trabajo6" y el nombre del archivo en "Estudiante2". De manera predeterminada, se selecciona "Agregar al proyecto", como se muestra en la Figura 6-6. Figura
6-6 Crear un nuevo archivo de encabezado de clase de estudiante

2)单击“OK”按钮,打开 Student2.h 文件,编辑代码如下:
//Student2.h
#include <string.h>
class Student{
    
    
public:
char name[20];
float height;
int age;
Student(char *n=" ", float h=1.6, int a=20) : height(h), age(a)
{
    
    
strcpy(name, n);
}
};3)在主文件中 work6.cpp 中编辑测试代码:

#include "stdafx.h"
#include "Student2.h"
#include <fstream.h>
int main(int argc, char* argv[])
{
    
    
int n;
cout<<"please input the number of student: ";
cin>>n;
66
Student *ps, stu;
ps = new Student[n];
char name[20];
float height;
int age;
for(int i=0; i<n; i++)
{
    
    
cout<<endl<<"Name: "; cin>>name; 
cout<<"Height: "; cin>>height;
cout<<"Age: "; cin>>age; 
*(ps+i) = Student(name, height, age);
}
char filename[] = "info.data";
fstream datafile(filename, ios::in|ios::out|ios::binary);
for(i=0; i<n; i++)
datafile.write((char*)(ps+i), sizeof(struct Student));
int num;
cout<<"Please input the number to print: ";
cin>>num;
while(num)
{
    
    
datafile.seekg((num-1)*sizeof(struct Student), ios::beg);
datafile.read((char*)&stu, sizeof(struct Student));
cout<<"Name: "<<stu.name<<endl;
cout<<"Height: "<<stu.height<<endl;
cout<<"Age: "<<stu.age<<endl;
cout<<"Please input the number to print: ";
cin>>num;
}
datafile.close();
return 0;
}

(4) Haga clic en el icono de comando "Generar" en la barra de herramientas para generar work6.exe.
(5) Haga clic en el icono de comando "Ejecutar" en la barra de herramientas para ejecutar work6.exe

preguntas de pensamiento

1. En C++, el acceso aleatorio a los archivos se realiza controlando el movimiento de los punteros de archivo. Generalmente, los archivos de texto son difíciles de ubicar con precisión, por lo que el acceso aleatorio se usa principalmente para archivos binarios. Pruebe. ¿Qué factores deben tenerse en cuenta al implementar el acceso aleatorio a archivos en C++?

La implementación del acceso aleatorio a archivos en C++ requiere la consideración de los siguientes factores:

  1. Al abrir un archivo, debe especificar el modo de acceso al archivo y el método de apertura correctos. Para archivos binarios, el modo "binario" debe usarse para operaciones de lectura y escritura para evitar cambios accidentales en los datos.

  2. El movimiento de la posición del puntero del archivo. El acceso aleatorio se puede lograr llamando a la función fseek para mover el puntero del archivo a la ubicación deseada. Al mover el puntero, debe prestar atención a la unidad de desplazamiento y las direcciones positivas y negativas para asegurarse de que el puntero del archivo se mueva a la posición correcta.

  3. El tamaño y formato de los datos leídos o escritos. Para los archivos binarios, dado que el tamaño y el formato de los tipos de datos pueden variar, el tamaño y el formato de los datos que se leerán o escribirán deben determinarse caso por caso.

  4. Al cerrar un archivo, es necesario asegurarse de que todos los punteros de archivo apunten correctamente al final del archivo para evitar la pérdida de datos y la corrupción.

Aquí hay un ejemplo simple que muestra cómo acceder aleatoriamente a un archivo binario en C++:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    // 打开二进制文件
    fstream file("test.bin", ios::out | ios::binary);

    // 写入数据
    int num1 = 12345;
    float num2 = 3.1415926;
    file.write(reinterpret_cast<char*>(&num1), sizeof(num1));
    file.write(reinterpret_cast<char*>(&num2), sizeof(num2));

    // 将文件指针移动到开头
    file.seekg(0);

    // 读取数据
    int num3;
    float num4;
    file.read(reinterpret_cast<char*>(&num3), sizeof(num3));
    file.read(reinterpret_cast<char*>(&num4), sizeof(num4));

    // 输出数据
    cout << "num1 = " << num3 << endl;
    cout << "num2 = " << num4 << endl;

    // 关闭文件
    file.close();
    
    return 0;
}

En el ejemplo anterior, primero abrimos un archivo binario llamado "test.bin" y le escribimos un entero y un flotante. Luego, el puntero del archivo se mueve al principio del archivo llamando a la función de búsqueda, y luego los dos datos se leen y se envían. Finalmente cerré el archivo.

2. ¿Probar la diferencia entre la función seekp y la función seekg para realizar la reubicación del puntero del archivo?
En C++, hay dos tipos de punteros de archivo: punteros de lectura y punteros de escritura. Para facilitar la operación, la biblioteca estándar de C++ proporciona las funciones seekg y seekp para realizar la reubicación de las dos posiciones del puntero.

La función de búsqueda es una función que se utiliza para cambiar la posición del puntero de lectura del archivo actual, lo que permite colocar el puntero de lectura del archivo en cualquier posición del archivo, lo que permite un acceso aleatorio al leer los datos. La función seekp es una función que se utiliza para cambiar la posición del puntero de escritura del archivo actual, lo que permite colocar el puntero de escritura del archivo en cualquier posición del archivo, lo que permite un acceso aleatorio al insertar y modificar datos.

El siguiente es un ejemplo simple que demuestra cómo usar las funciones seekg y seekp para implementar la reubicación del puntero de archivo:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    // 打开文件
    fstream file("test.txt", ios::out | ios::in);

    // 写入数据
    file << "0123456789";

    // 重定位读指针(从开头开始向右移动3个字符)
    file.seekg(3, ios::beg);

    // 读取一个字符
    char ch;
    file.get(ch);
    cout << ch << endl;   // 输出3

    // 重定位写指针(从当前位置开始向右移动2个字符)
    file.seekp(2, ios::cur);

    // 插入一个字符
    file.put('A');

    // 重定位读指针(从开头开始向右移动2个字符)
    file.seekg(2, ios::beg);

    // 读取一个字符
    file.get(ch);
    cout << ch << endl;   // 输出0

    // 关闭文件
    file.close();
    
    return 0;
}

En el ejemplo anterior, primero abrimos un archivo llamado "test.txt" y escribimos una cadena de números en él. Luego, el puntero de lectura del archivo se mueve a la posición del cuarto carácter de la cadena llamando a la función de búsqueda, y luego este carácter se lee y se emite. A continuación, movemos el puntero de escritura del archivo a los dos últimos caracteres del puntero de lectura actual llamando a la función seekp y luego insertamos una letra "A" mayúscula en el archivo. Finalmente, volvemos a llamar a la función de búsqueda para mover el puntero de lectura del archivo a la posición del tercer carácter de la cadena, y luego leemos este carácter nuevamente y lo emitimos.

Se puede ver que al usar las funciones seekg y seekp, podemos controlar de manera flexible la posición del puntero del archivo, logrando así un acceso y modificación flexibles de los datos del archivo. Cabe señalar que los métodos de cálculo y los significados de los parámetros de compensación de las dos funciones son ligeramente diferentes, seleccione el tipo de parámetro apropiado y el valor del parámetro de acuerdo con la situación específica.

3. Complemente y mejore el contenido del tema de [Práctica en la computadora], ordene la información de los estudiantes según las necesidades del usuario (según la altura, la edad) y luego muestre la información de N estudiantes.

Supongo que te gusta

Origin blog.csdn.net/shaozheng0503/article/details/130645396
Recomendado
Clasificación