elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / como borro o modifico datos en un fichero? en: 21 Abril 2014, 23:52 pm
Hola estoy haciendo un programa que lo que hace es guardar datos de productos en un fichero, pero no se como hacer para borrar o modificar estos datos, osea no se como hacer la funcion que realice esto, les dejo el codigo...

Código:

#include <stdio.h>

typedef struct producto{
    char nombre[20];
    char fabricante[20];
    char descripcion[50];
    int precio;
} producto ;


void imprimirMenu(void);
void nuevoProducto(char *nombreArchivo);
void borrarProducto();
void modificarProducto();
void verProducto();


int main(){

    char *nombreArchivo="productos.dat";
    int opcion;

    imprimirMenu();
    fflush(stdin);
    scanf("%d", &opcion);

    switch (opcion){

        case 1: nuevoProducto(nombreArchivo);
        case 2: borrarProducto();
        case 3: modificarProducto();
        case 4: verProducto();
       
        default: printf("\n\nOpcion incorrecta");
       
    }


    printf("\n\n");

    return 0;
}


void imprimirMenu(void){
    printf("\n----Almacen----");
    printf("\n\n-Menu: ");
    printf("\n1-Nuevo producto\n2-Borrar producto\n3-Modificar producto\n4-Ver producto\n\nOpcion: ");
}

void nuevoProducto(char *nombreArchivo){

    system("cls");

    FILE *pf;

    if((pf=fopen(nombreArchivo, "a"))==NULL){
        printf("\nNo se pudo abrir el archivo");
        exit (-1);
    }

    producto p;

    printf("\nNombre: ");
    fflush(stdin);
    gets(p.nombre);
    printf("\nFabricante: ");
    fflush(stdin);
    gets(p.fabricante);
    printf("\nDescripcion: ");
    fflush(stdin);
    gets(p.descripcion);
    printf("\nPrecio: ");
    fflush(stdin);
    scanf("%d", &p.precio);

    fputs("Nombre: ", pf);
    fputs(p.nombre, pf);
    fputs("\nFabricante: ", pf);
    fputs(p.fabricante, pf);
    fputs("\nDescripcion: ", pf);
    fputs(p.descripcion, pf);
    fputs("\nPrecio: ", pf);
    fprintf(pf, "%d\n\n", p.precio);

}

12  Programación / Programación C/C++ / Re: Duda EOF en: 11 Abril 2014, 21:19 pm
Funcionar, lo que se dice funcionar, funciona. Otra cosa es que los resultados sean los previstos, que no lo son.

Además de declarar main como int inicializo max a cero, que no lo estaba y la salida poniendo un printf justito después del while:


Código
  1. printf("len=%d \n", len);

Al parecer la variable len no pilla el retorno de la función, al menos dentro del while ¿?. :huh:

En cambio si la sacamos del while funciona perfecto. Lo he ajustado para que al entrar un enter solitario, sin nada en la linea, se acabe la ejecución sin así tener que recurrir al CTR-Z:


Código
  1. #include <stdio.h>
  2.  
  3. #define MAXLINE 1000
  4.  
  5. int getline(char line[], int maxline);
  6.  
  7. void copy(char to[], char from[]);
  8.  
  9. int main(){
  10.    int len=2, max=0;
  11.    char line[MAXLINE];
  12.    char longest[MAXLINE];
  13.    while (len>1){
  14.        len=getline(line, MAXLINE);
  15.        printf("len=%d   ", len);
  16.        if(len > max){
  17.            max = len;
  18.            printf("max=%d\n", max);
  19.            copy(longest, line);
  20.            }
  21.        }
  22.    if(max > 0)
  23.        printf("\nCadena mas larga: %s", longest);
  24.    return 0;
  25. }
  26.  
  27. int getline(char s[], int lim){
  28.    int c, i;
  29.    for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
  30.        s[i] = c;
  31.    if(c == '\n'){
  32.        s[i] = c;
  33.        ++i;
  34.    }
  35.    s[i] = '\0';
  36.    printf("%d\n", i);
  37.    return i;
  38. }
  39.  
  40. void copy(char to[], char from[]){
  41.    int i;
  42.    i=0;
  43.    while((to[i] = from[i]) != '\0'){
  44.        ++i;
  45.    }
  46. }

Aún no le encuentro justificación al comportamiento de len dentro del while. :silbar:

¡¡¡¡ Saluditos! ..... !!!!







muchas gracias
13  Programación / Programación C/C++ / Re: Cadenas de caracteres con punteros en: 11 Abril 2014, 19:55 pm
Esa sentencia declara al array "cadena" y sus elementos se inicializan con 'H', 'l', etc.
Funciona porque el valor inicial del puntero "cadena" es la dirección en memoria donde se almacena la cadena literal "Hola como te va". No se esta almacenando en el la cadena sino su dirección. Caso similar con el cartero: el no confunde la dirección en el sobre (un puntero) con el objeto que debe localizar (la casa).

Un saludo

pero si vos me decis que en ese puntero se almacena la direccion de la cadena "Hola como te va", porque cuando quiero imprimir la cadena no se pone el astarisco?

Código:

    char *cadena = "Hola como te va";
    printf("%s", cadena);


14  Programación / Programación C/C++ / Re: Duda EOF en: 11 Abril 2014, 19:50 pm
Introduces la combinación de teclas y a continuación presionas la tecla {ENTER}.

Un saludo

perdon, pero no me funciona
15  Programación / Programación C/C++ / Cadenas de caracteres con punteros en: 11 Abril 2014, 04:19 am
Estoy estudiando C, y hasta ahora las cadenas de caracteres las venia creando asi:

Código:

char cadena[] = "Hola como te va";


pero ahora me encontre que tambien se puede hacer asi:

Código:

char* cadena = "Hola como te va";


y no entiendo porque funciona, osea por lo que entiendo los punteros son para aputar a direcciones de otras variables, pero en este caso lo estaria usando para guardar en el una cadena de texto, no entiendo porque funciona, porque crea en el un array.
16  Programación / Programación C/C++ / Re: Duda EOF en: 11 Abril 2014, 03:41 am
Es una macro definida en <stdio.h> con un valor menor que cero (usualmente -1) y es el valor de retorno de algunas funciones de la biblioteca estándar (por ejemplo getchar) para indicar que la operación de lectura fallo al alcanzar el final del archivo.
Es uno de los ejemplos del libro "The C programming language".
Es el comportamiento normal. Como se procesa la entrada estándar debes introducir varias lineas y a continuación la señal de fin de archivo ({CONTROL} + Z en MS Windows y {CONTROL} + d en Linux). Solo entonces el programa imprimirá la linea mas larga.

Un saludo

yo apreto ctrl + z y no pasa nada, me aparece el ^Z
17  Programación / Programación C/C++ / Duda EOF en: 8 Abril 2014, 23:30 pm
bueno, basicamente no entiendo que es lo que hace EOF, les dejo ete programa que en teoria imprime la linea de entrada mas larga, pero yo ejecuto el programa y no hace nada, solo espera q le ingrese datos por teclado, yo creo que es por algo del EOF, que siempre da verdadero el while.

Código:
#include <stdio.h>

#define MAXLINE 1000

int getline(char line[], int maxline);

void copy(char to[], char from[]);

main(){

    int len, max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max=0;

    while ((len=getline(line, MAXLINE) > 0 )){
        if(len > max){
            max = len;
            copy(longest, line);
            }
        }

        if(max > 0){
            printf("%s", longest);
        }


        return 0;


}



int getline(char s[], int lim){

    int c, i;

    for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if(c == '\n'){
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;


}


void copy(char to[], char from[]){

    int i;

    i=0;
    while((to[i] = from[i]) != '\0'){
        ++i;
    }
}


Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines