Programa de manejo de archivos binarios [cerrado] -- ++ campo con file camp codereview Relacionados El problema

Binary File Handling Program [closed]


-1
vote

problema

Español
cerrado . Esta pregunta necesita detalles o claridad . Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Agregar detalles y aclarar el problema por Edición de este post .

CERRADO hace 4 años .

Mejorar esta pregunta

Por favor revise este código:

  item6  
Original en ingles

Please review this code :

#include <iostream> #include <fstream> using namespace std;  int main() {      float height[4]={17.5,8.4,2.9,7.9};     ofstream file;     file.open("BINARY.DAT", ios::binary | ios::out);     file.write((char*)&height, sizeof(height));     for(int i=0;i<4;i++)     height[i]=1;     file.close();     ifstream file1;     file1.open("BINARY.DAT", ios::binary | ios::in);     file1.read((char*)&height, sizeof(height));     for(int i=0;i<4;i++)     {         cout<<height[i];     }     file1.close();      return 0; }                                                                                                                                                                                                                                                                                                                                            
     
       
       

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

using namespace std es Considerado mala práctica < / a>. Así que quieres deshacerme de eso.

A continuación, debe darle las variables mejores nombres. file y file1 son algo descriptividad. Ambos le dicen que es un archivo, pero ninguno dice qué tipo de archivo.

También verifique si realmente fue capaz de abrir el archivo. Por ejemplo, el archivo podría ser solo de escritura (y su 99887776555443333 , pero su 9988776655544334 falla), solo lectura (y su 9988777655544335 falla, pero su 9988776655544336 funciona), o ninguno (y ambos falla).

¿Qué es ese 4 , por cierto? El número de elementos en su height es un número mágico. Puede cambiar en algún momento, y debe actualizarlo a lo largo de su programa. Eso es un error propenso. Es algo bueno para un pequeño programa como este, pero en programas más grandes, desea dar ese nombre a ese número (ver más arriba), algo así como HEIGHT_LENGTH . MISMO SOLICITURAS PARA file0 . No desea utilizar accidentalmente file1 la segunda vez.

Por último, pero no menos importante: use el lanzamiento de estilo C como último recurso. Estás buscando un 99887766555443312 .

Por cierto, si es posible, mantenga el alcance de sus variables PEQUEÑAS:

  file3  

También he agregado algo de espacio en blanco. Tenga en cuenta: escribe código tanto para la máquina y al humano que va a leer ese código más adelante. Ese humano podría ser usted o su supervisor. Asegúrese de que sea fácil de leer.

 

using namespace std is considered bad practice. So you want to get rid of that.

Next, you should give you variables better names. file and file1 are somewhat descriptiveness. Both tell you that it's a file, but neither says what kind of file.

Also check whether you were actually able to open the file. For example, the file could be write-only (and your file.write(xe2x80xa6) works, but your file1.read(xe2x80xa6) fails), read-only (and your file.write(xe2x80xa6) fails, but your file1.read(xe2x80xa6) works), or neither (and both fail).

What's that 4, by the way? The number of elements in your height is a magic number. It might change at some point, and you have to update it throughout your program. That's error prone. It's somewhat fine for a small program like this, but in greater programs, you want to give that number a name (see above), something like HEIGHT_LENGTH. Same holds for "BINARY.DAT". You don't want to accidentally use "BINARY.Dar" the second time.

Last but not least: use C-style cast as a last resort. You're looking for a reinterpret_cast<char*>.

By the way, if possible, keep the scope of your variables small:

#include <iostream> #include <fstream>  int main() {     float height[4] = {17.5,8.4,2.9,7.9};      // Write to the file:         {         std::ofstream output;         if(!output.open("BINARY.DAT", ios::binary | ios::out)){             std::cerr << "could not open file!";             return 1;         }         output.write(reinterpret_cast<char*>(height), sizeof(height));         output.close(); // not actually necessary     }      // Set the value to 1 for testing purposes     for(int i = 0; i < 4; i++)      {         height[i] = 1;     }      // Read back from the file:     {         std::ifstream input;         if(!input.open("BINARY.DAT", ios::binary | ios::in)){             std::cerr << "could not open file!";             return 2;         }         input.read(reinterpret_cast<char*>(height), sizeof(height));         input.close(); // not actually necessary     }      for(int i = 0; i < 4; i++)     {         std::cout << height[i] << ' ';     }     std::cout << std::endl;      return 0; } 

I've also added some whitespace. Keep in mind: you write code both for the machine and the human who's going to read that code later. That human might be you or your supervisor. Make sure that it's easy to read.

 
 

Relacionados problema

2  Saltando espacios en blanco al leer el archivo  ( Skipping whitespaces when reading file ) 
En la lectura de un archivo, encontré líneas en blanco (incluso en la parte inferior) se bloquean el programa. Para solucionar esto, he agregado el siguiente ...

6  Programa Haskell para cambiar el nombre de las imágenes basadas en datos exif  ( Haskell program to rename images based on exif data ) 
movido originalmente de StackOverFlow , sin saber la existencia de este sitio hermano ... Debe decir que encuentro la programación en Haskell para requer...

6  Clasificación de palabras por frecuencia  ( Sorting words by frequency ) 
Estoy haciendo una tarea simple en óxido después de leer el Libro de óxido : Lea un archivo de texto dividirlo en Whitespace desinfectar palabras elim...

2  Fusionar directorios y mantener archivos que tengan más líneas  ( Merging directories and keep files that have more lines ) 
gol Mi objetivo es combinar directorios. Cada vez que un archivo tiene el mismo nombre en dos o más directorios, solo se debe mantener el número más alto ...

2  Clase PHP para el manejo de archivos y la creación  ( Php class for file handling and creation ) 
Esta es una clase muy simple para manejar archivos. Permite acceder, crear y modificar archivos en el sistema o 2 archivos falsos (uno en la memoria y otros...

8  Encuentra el número más grande en una matriz  ( Find the greatest number in an array ) 
El programa lee un archivo .txt que contiene líneas de números. El primero tiene un número N y el segundo tiene números $ N $ a medida que dice la primera l...

5  Min y Max de números leen de un archivo  ( Min and max of numbers read from a file ) 
Tuve que crear este programa, y ​​lo hice bien, todo está trabajando y cosas, pero me preguntaba, ¿qué es mejor hacerlo? Quiero un método más eficiente. Asi...

3  Lectura y clasificación de líneas de un archivo  ( Reading and classifying lines from a file ) 
Soy nuevo en C que estoy aprendiendo en la universidad ahora, y no estoy seguro de si lo siguiente se considera en las buenas prácticas o no. Para una asign...

9  Entrada de usuario y lectura de contenidos de archivo  ( User input and reading contents of file ) 
Para la divulgación completa: esta es una tarea para mi clase de programación y solo quiero consejos o consejos sobre algunos del código. Detalles de asigna...

4  Iterar sobre un archivo varias veces  ( Iterate over a file multiple times ) 
El objetivo del código es imprimir todas las cadenas de un archivo que coinciden con cadenas de otro archivo. Los nombres de ambos archivos son proporcionados...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos