Problema en codigo. Escritura y Lectura de un archivo secuencial

Iniciado por traviatØ, 26 Octubre 2012, 16:32 PM

0 Miembros y 1 Visitante están viendo este tema.

traviatØ

Hola, sucede que estaba creando un programa que escriba y lea registros de un archivo de acceso secuencial, veo el codigo y no le veo errores, sin embargo al compilar el compilador me arroja los siguientes errores, ni idea de porque y son varios,

C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c: In function `main':
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:40: error: syntax error before "else"
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c: At top level:
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:70: warning: parameternames (withouttypes) in functiondeclaration
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:70: warning: data definition has no typeorstorageclass
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: error: syntax error beforestringconstant
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: error: conflictingtypesfor 'scanf'
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: note: a parameterlistwithanellipsiscan't match anemptyparameternamelistdeclaration
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: error: conflictingtypesfor 'scanf'
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: note: a parameterlistwithanellipsiscan't match anemptyparameternamelistdeclaration
C:\Dev-Cpp\escritura, lectura y busqueda de cuenta, secuencialmente.c:72: warning: data definition has no typeorstorageclass

Este es el codigo

#include <stdio.h>
#include <string.h>
//crear un archivo de acceso secuencial, insertar los datos y luego leerlos, escribir y leer registros

int main()
{
   FILE *fPtr;
   char *op;
   int cuenta;
   char *nombre;
   float saldo;
   int sCuenta;
   int rCuenta;
   char *rNombre;
   float rSaldo;
   int ctaE = 0;
   
   printf("Escriba escribir si desea escribir algo en un archivo, o leer si desea leer algo en un archivo: ");
   scanf("%s",&op);
   
   if(strcmp(op,"escribir")==0)
   {
      if((fPtr = fopen("archivo.txt","w")) == NULL)
      {
          printf("\nEl archivo no puede ser abierto para escritura");
      }
      else
      {
          printf("\nIngrese numero de cuenta, nombre y saldo en decimales (nnnn.nn) ");
          printf("\nO Ingrese EOF para finalizar: ");
          scanf("%d%s%f", &cuenta, &nombre, &saldo);
         
          while(!feof(stdin))
          {
          fprintf(fPtr, "%d %s %.2f\n");
          printf("?: ");
          scanf("%d%s%f", &cuenta, &nombre, &saldo);
          }
      }
   else  //Este else marca error
   {
       if(strcmp(op,"leer")==0)
       {
          if((fPtr = fopen("archivo.txt","r")) == NULL)
          {
              printf("\nEl archivo no puede ser abierto para lectura");
          }
       else
       {
           printf("Ingrese un numero de cuenta: ");
           scanf("%d",&sCuenta);
           
           while(!feof(fPtr))
           {
              fscanf(fPtr, "%d %s %f", &rCuenta, &rNombre, &rSaldo);
              if(sCuenta==rCuenta)
              {
              printf("Numero de cuenta encontrado:\n");
              printf("\n%d %s %.2f", rCuenta, rNombre, rSaldo);
              ctaE = 1;
              }
           }
           if(ctaE == 0)
           {
               printf("\nEl numero de cuenta No Fue encontrado");
           }
       }
   }
   
   fclose(fPtr); //Marca error
   
   scanf("%d",&cuenta); //Marca error
   
   return 0;
}


Alguna ayuda por favor  :silbar: Saludos
                     

rir3760

El error se genera porque una sentencia de selección "if" solo puede tener un bloque "else" y tu tienes dos:
if ((fPtr = fopen ("archivo.txt", "w")) == NULL){
   /* ... */
}else {
   printf ("\nIngrese numero de cuenta, nombre y saldo en decimales (nnnn.nn) ");
   /* ... */
}else { //Este else marca error
   if (strcmp (op, "leer") == 0) {
   /* ... */
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language