Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Tremenda Duda!!

Estas en el tema de Tremenda Duda!! en el foro de C/C++ en Foros del Web. Hola, tengo una duda en C esque estoy estudiando por que tengo examen y solo tengo algunas dudas para terminar de estudiar, bueno, para practicar ...
  #1 (permalink)  
Antiguo 07/12/2006, 01:43
 
Fecha de Ingreso: diciembre-2006
Mensajes: 25
Antigüedad: 17 años, 3 meses
Puntos: 0
Tremenda Duda!!

Hola, tengo una duda en C esque estoy estudiando por que tengo examen y solo tengo algunas dudas para terminar de estudiar, bueno, para practicar estoy haciendo una agenda de mis amigos, utilizando funciones y archivos, solo que no se como hacerle bien.. en fin pegare aqui lo que hize, haber si alguien me ayuda y me explica bien como se hace..

#include<stdio.h>
#include<conio.h>
#include<string.h>
void altas();
void congen();
void conind();
void salir();
void main()
{ int op;
do
{
printf("1-altas\n2-consulta general\n3-consulta individual\n4-salir\n");
printf("opcion?:");
scanf("%d",&op);
switch(op)
{ case 1:clrscr();
altas();
break;
case 2:clrscr();
congen();
break;
case 3:clrscr();
conind();
break;
case 4:clrscr();
salir();
break;
default:clrscr();
printf("opcion no valida");
}
}while(op!=4);
getch();
}
void altas()
{ FILE *arch;
char nom[30],cum[30],dir[40],tel[30],op;
do
{clrscr();
printf("nombre:");
flushall();
gets(nom);
printf("cumplea¤os:");
gets(cum);
printf("direccion:");
gets(dir);
printf("telefono:");
gets(tel);
arch=fopen("c:\amigos.txt","a");
if(arch==NULL)
{
printf("problemas al abrir el archivo de amigos");
getch();
exit(1);
}
fprintf(arch,"%s %s %s %s",nom,cum,dir,tel);
if(fclose(arch)!=0)
{
printf("problemas al cerrar el archivo de amigos");
getch();
}
printf("deceas dar de alta a alguien mas..s/n?:");
scanf("%c",&op);
}while(op=='s');
getch();
}
void congen()
{ clrscr();
FILE *arch;
char nom[30],cum[30],dir[40],tel[30];
arch=fopen("c:\amigos.txt","r");
if(arch==NULL)
{
printf("problemas al abrir el archivo de amigos");
getch();
exit(1);
}
printf("lista de amigos");
fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
while(feof(arch)==0)
{
printf("nombre: %s\n",nom);
printf("cumplea¤os: %s\n",cum);
printf("direccion: %s\n",dir);
printf("telefono: %s\n",tel);
fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
}
if(fclose(arch)!=0)
printf("problemas al cerrar el archivo de amigos");
getch();
}
void conind()
{ clrscr();
FILE *arch;
char n[30],nom[30],cum[30],dir[40],tel[30];
int b;
arch=fopen("c:\amigos.txt","r");
if(arch==NULL)
{
printf("problemas al abrir el archivo de amigos");
getch();
exit(1);
}
printf("nombre del amigo: ");
flushall();
get(n);
fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
while(feof(arch)==0)
{
b=0;
if(strcmp(n,nom)==0)
{
b=1;
printf("nombre: %s\m",nom);
printf("cumplea¤os: %s\n",cum);
printf("direccion: %s\n",dir);
printf("telefono: %s\n",tel);
}
fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
}
if(fclose(arch)!=0)
printf("problemas al cerrar archivo de amigos");
if(b==0)
printf("no se encontro ese nombre");
getch();
}
void salir()
{
clrscr();
printf("adios");
getch();
}

bien...para aclarar la duda, no se como combinar funciones y archivos, no se si tenga que regresar algun valor para que en la segunda funcion de consulta general pues agarre bien... espero que me ayuden gracias.
  #2 (permalink)  
Antiguo 07/12/2006, 18:38
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 18 años, 11 meses
Puntos: 17
Re: Tremenda Duda!!

Por favor, publica los códigos con la etiqueta CODE, y no utilices la librería conio.h
  #3 (permalink)  
Antiguo 07/12/2006, 21:18
 
Fecha de Ingreso: diciembre-2006
Mensajes: 25
Antigüedad: 17 años, 3 meses
Puntos: 0
Sonrisa Re: Tremenda Duda!!

Código:
#include<stdio.h>

#include<string.h>
void altas();
void congen();
void conind();
void salir();
void main()
{ int op;
 do
 {
	printf("1-altas\n2-consulta general\n3-consulta individual\n4-salir\n");
	printf("opcion?:");
	scanf("%d",&op);
	switch(op)
	{ case 1:clrscr();
					 altas();
					 break;
		case 2:clrscr();
					 congen();
					 break;
		case 3:clrscr();
					 conind();
					 break;
		case 4:clrscr();
					 salir();
					 break;
		default:clrscr();
						printf("opcion no valida");
	}
 }while(op!=4);
getch();
}
void altas()
{ FILE *arch;
	char nom[30],cum[30],dir[40],tel[30],op;
	do
	{clrscr();
	 printf("nombre:");
	 flushall();
	 gets(nom);
	 printf("cumplea¤os:");
	 gets(cum);
	 printf("direccion:");
	 gets(dir);
	 printf("telefono:");
	 gets(tel);
	 arch=fopen("c:\amigos.txt","a");
	 if(arch==NULL)
		 {
			printf("problemas al abrir el archivo de amigos");
			getch();
			exit(1);
		 }
	 fprintf(arch,"%s %s %s %s",nom,cum,dir,tel);
	 if(fclose(arch)!=0)
			{
			 printf("problemas al cerrar el archivo de amigos");
			 getch();
			}
	 printf("deceas dar de alta a alguien mas..s/n?:");
	 scanf("%c",&op);
	}while(op=='s');
 getch();
 }
void congen()
{ clrscr();
	FILE *arch;
	char nom[30],cum[30],dir[40],tel[30];
	arch=fopen("c:\amigos.txt","r");
	if(arch==NULL)
		{
		 printf("problemas al abrir el archivo de amigos");
		 getch();
		 exit(1);
		}
	printf("lista de amigos");
	fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
	while(feof(arch)==0)
			 {
				printf("nombre: %s\n",nom);
				printf("cumplea¤os: %s\n",cum);
				printf("direccion: %s\n",dir);
				printf("telefono: %s\n",tel);
				fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
			 }
	if(fclose(arch)!=0)
		printf("problemas al cerrar el archivo de amigos");
 getch();
}
void conind()
{ clrscr();
	FILE *arch;
	char n[30],nom[30],cum[30],dir[40],tel[30];
	int b;
	arch=fopen("c:\amigos.txt","r");
	if(arch==NULL)
		{
		 printf("problemas al abrir el archivo de amigos");
		 getch();
		 exit(1);
		}
	printf("nombre del amigo: ");
	flushall();
	get(n);
	fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
	while(feof(arch)==0)
			 {
				b=0;
				if(strcmp(n,nom)==0)
					{
					 b=1;
					 printf("nombre: %s\m",nom);
					 printf("cumplea¤os: %s\n",cum);
					 printf("direccion: %s\n",dir);
					 printf("telefono: %s\n",tel);
					}
				fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
			 }
	if(fclose(arch)!=0)
		printf("problemas al cerrar archivo de amigos");
	if(b==0)
		printf("no se encontro ese nombre");
 getch();
}
void salir()
{
 clrscr();
 printf("adios");
 getch();
}
orale...gracias ahora si esta mas legible,...pero no entendi lo de la libreria conio.h
  #4 (permalink)  
Antiguo 08/12/2006, 04:17
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 18 años, 11 meses
Puntos: 17
Re: Tremenda Duda!!

Cita:
Iniciado por fernandoBH Ver Mensaje
Código:
#include<stdio.h>

#include<string.h>
void altas();
void congen();
void conind();
void salir();
void main()
{ int op;
 do
 {
	printf("1-altas\n2-consulta general\n3-consulta individual\n4-salir\n");
	printf("opcion?:");
	scanf("%d",&op);
	switch(op)
	{ case 1:clrscr();
					 altas();
					 break;
		case 2:clrscr();
					 congen();
					 break;
		case 3:clrscr();
					 conind();
					 break;
		case 4:clrscr();
					 salir();
					 break;
		default:clrscr();
						printf("opcion no valida");
	}
 }while(op!=4);
getch();
}
void altas()
{ FILE *arch;
	char nom[30],cum[30],dir[40],tel[30],op;
	do
	{clrscr();
	 printf("nombre:");
	 flushall();
	 gets(nom);
	 printf("cumplea¤os:");
	 gets(cum);
	 printf("direccion:");
	 gets(dir);
	 printf("telefono:");
	 gets(tel);
	 arch=fopen("c:\amigos.txt","a");
	 if(arch==NULL)
		 {
			printf("problemas al abrir el archivo de amigos");
			getch();
			exit(1);
		 }
	 fprintf(arch,"%s %s %s %s",nom,cum,dir,tel);
	 if(fclose(arch)!=0)
			{
			 printf("problemas al cerrar el archivo de amigos");
			 getch();
			}
	 printf("deceas dar de alta a alguien mas..s/n?:");
	 scanf("%c",&op);
	}while(op=='s');
 getch();
 }
void congen()
{ clrscr();
	FILE *arch;
	char nom[30],cum[30],dir[40],tel[30];
	arch=fopen("c:\amigos.txt","r");
	if(arch==NULL)
		{
		 printf("problemas al abrir el archivo de amigos");
		 getch();
		 exit(1);
		}
	printf("lista de amigos");
	fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
	while(feof(arch)==0)
			 {
				printf("nombre: %s\n",nom);
				printf("cumplea¤os: %s\n",cum);
				printf("direccion: %s\n",dir);
				printf("telefono: %s\n",tel);
				fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
			 }
	if(fclose(arch)!=0)
		printf("problemas al cerrar el archivo de amigos");
 getch();
}
void conind()
{ clrscr();
	FILE *arch;
	char n[30],nom[30],cum[30],dir[40],tel[30];
	int b;
	arch=fopen("c:\amigos.txt","r");
	if(arch==NULL)
		{
		 printf("problemas al abrir el archivo de amigos");
		 getch();
		 exit(1);
		}
	printf("nombre del amigo: ");
	flushall();
	get(n);
	fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
	while(feof(arch)==0)
			 {
				b=0;
				if(strcmp(n,nom)==0)
					{
					 b=1;
					 printf("nombre: %s\m",nom);
					 printf("cumplea¤os: %s\n",cum);
					 printf("direccion: %s\n",dir);
					 printf("telefono: %s\n",tel);
					}
				fscanf(arch,"%s %s %s %s",nom,cum,dir,tel);
			 }
	if(fclose(arch)!=0)
		printf("problemas al cerrar archivo de amigos");
	if(b==0)
		printf("no se encontro ese nombre");
 getch();
}
void salir()
{
 clrscr();
 printf("adios");
 getch();
}
orale...gracias ahora si esta mas legible,...pero no entendi lo de la libreria conio.h
Te explico: conio.h no existe en C. Esa librería es exclusivamente una antigua librería de Borland C para MS-DOS.

Dicha librería es la que te provee de clrsrc(); y getch();

Por favor, trata de reemplazarlas. Una posibilidad es usar esto al principio de tu código y seguirá funcionando como ahora, pero portable:

#ifdef WIN32
#define clrsrc() system("cls");
#else
#define clrsrc() system("clear");
#endif

Y aparte, getch() puedes conseguirlo con funciones como getc(), getchar(), o similares de C estándar.
  #5 (permalink)  
Antiguo 22/12/2006, 07:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Tremenda Duda!!

Bueno tenías algunos errores del estilo: antes de declarar las variables hacías un clrscr(). Después cambié otras cosas (saque algunos ciclos while por ejemplo) y seguí la recomendación de MaxExtreme de definir al clrscr como función del sistema (Igualmente creo que me equivoqué en incluir la libreria que contiene la función system... por eso no funciona tal vez...).
Después la consulta individual no funciona bien... (pido ayuda jej!), pero la dejé planteada para que veas como la pretendía realizar. (Algunas cosas las hice de una forma distinta a como las habías planteado).

Código:
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 30
#define W 40

#ifdef WIN32   
#define clrscr() system("cls");
#else
#define clrscr() system("clear");
#endif		   


int Menu(void)
{
	int opcion;

	printf("0-salir\n1-altas\n2-consulta general\n3-consulta individual\n");// empieza con 0
	printf("opcion?:");
	scanf("%i",&opcion);
	getc(stdin);
	return opcion;
}

void altas();
void congen();
void conind();
void salir();

void main(void)
{
	int opcion;

    opcion= Menu();
    while(opcion!=0)
    {
        switch(opcion)
        {
        case 1: 
            clrscr();
			altas();
            break;
        case 2:
			clrscr();
			congen();
            break;
        case 3:
			clrscr();
			conind();
            break;
        default:
            printf("Ingrese una opcion correcta\n");
            break;
        }
        opcion= Menu();
    }
	salir();
}


void altas()
{ 
	FILE *arch;
	char nom[N],cum[N],dir[W],tel[N];
	
	clrscr();
	printf("nombre:");
	flushall();
	gets(nom);
	printf("cumplea¤os:");
	gets(cum);
	printf("direccion:");
	gets(dir);
	printf("telefono:");
	gets(tel);
	arch=fopen("amigos.txt","a");
	
	if(arch==NULL)
	{
		printf("problemas al abrir el archivo de amigos\n");
		getc(stdin);
		exit(1);
	}
	fprintf(arch,"Nombre:\n%s\nCumplea¤os:\n%s\nDireccion:\n%s\nTelefono:\n%s\n",nom,cum,dir,tel);
	
	if(fclose(arch)!=0)
	{
		printf("problemas al cerrar el archivo de amigos\n");
		getc(stdin);
	}
	
}

void congen()
{ 
	FILE *arch;
	int nro=1;
	char DATOS[N];
	
	clrscr();
	arch=fopen("amigos.txt","r");
	if(arch==NULL)
	{
		 printf("problemas al abrir el archivo de amigos\n");
		 getc(stdin);
		 exit(1);
	}
	printf("\nLista de amigos\n\n");
	fgets(DATOS,N,arch);

	while(feof(arch)==0)
	{
		printf("%s",DATOS);
		fgets(DATOS,N,arch);

		if((nro!=0)&&((nro%8)==0))
		{
			printf("\nPulse enter para continuar\n");
			getc(stdin);
		}
		else
		{
			if((nro!=0)&&((nro%2)==0))
				printf("\n");
		}
		nro++;
	}

	if(fclose(arch)!=0)
		printf("problemas al cerrar el archivo de amigos\n");
}

void conind()
{ 
	FILE *arch;
	char DATOS[N],NOMBRE[W];
	int b;
	
	clrscr();
	
	arch=fopen("amigos.txt","r");
	if(arch==NULL)
	{
		printf("problemas al abrir el archivo de amigos");
		getc(stdin);
		exit(1);
	}
	printf("nombre del amigo: ");
	flushall();
	gets(NOMBRE);
	fgets(DATOS,N,arch);
	while(feof(arch)==0)
	{
		b=0;

		if((strcmp(NOMBRE,DATOS))&&(b==0)) // Aca tengo un problema...
		{
			b++;
			//if(b==1)
			//	printf("Nombre: %s",DATOS);
			printf("b %i",b);
			while(b<=4)
			{
				printf("%s",DATOS);
				b++;
				fgets(DATOS,N,arch);
			}
		}
		fgets(DATOS,N,arch);
	}
	if(fclose(arch)!=0)
		printf("problemas al cerrar archivo de amigos");
	if(b==0)
		printf("no se encontro ese nombre");
	getc(stdin);
}

void salir()
{
	clrscr();
	printf("adios");
	getc(stdin);
}
  #6 (permalink)  
Antiguo 22/12/2006, 08:01
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 18 años, 11 meses
Puntos: 17
Re: Tremenda Duda!!

Una cosa, yo no apoyo el uso de clrscr, ni del clrscr que dejé escrito, simplemente es para que, la gente que no pueda vivir sin borrar la pantalla (que no lo entiendo), lo pueda hacer. Aún así lo desaconsejo totalmente.

¿Y cuál es el problema de tu código exactamente?
  #7 (permalink)  
Antiguo 22/12/2006, 08:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 13
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Tremenda Duda!!

Aparentemente dos cosas o estoy utlizando mal el strcmp o strcmp no me toma bien lo que compara función: conind().
  #8 (permalink)  
Antiguo 22/12/2006, 08:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 18 años, 11 meses
Puntos: 17
Re: Tremenda Duda!!

if((strcmp(NOMBRE,DATOS))&&(b==0)

La función strcmp() devuelve 0 si ha encontrado una coincidencia exacta. ¿Estás seguro que lo que intentas es lo contario?

Sino: if(!(strcmp(NOMBRE,DATOS))&&(b==0)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:55.