Alguien .. ?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúpublic class Agenda implements AgendaInterfaz {
private ContactoInterfaz matriz [] = null;
private int numeroContactosUsados = 0;
/**
* Maximo numero de contactos que puede incluir la agenda.
*/
public Agenda ( String archivo ) throws OperacionNoPermitidaExcepcion {
this.matriz = new ContactoInterfaz[MAX_NUM_CONTACTOS];
DatosDeEntrada obj = null;
try {
obj = new DatosDeEntrada( archivo );
while(obj.haySiguienteContacto()) {
ContactoInterfaz contacto = obj.siguienteContacto();
this.insertarContacto ( contacto );
}
} catch (OperacionNoPermitidaExcepcion e) {
throw e;
}
}
public void insertarContacto(ContactoInterfaz contacto)
throws OperacionNoPermitidaExcepcion {
}
public void modificarTelefono(TelefonoInterfaz telefonoAntiguo,
TelefonoInterfaz telefonoNuevo)
throws OperacionNoPermitidaExcepcion {
}
public void eliminarContacto(TelefonoInterfaz telefono)
throws OperacionNoPermitidaExcepcion {
}
public void mostrarContactos() {
}
}
/**
* Esta es una clase que representa una agenda de telefonos.
* Mantiene un conjunto de contactos.
*
* @version version 1.1 Abril 2015
* @author Fundamentos de Programacion II
*/
public interface AgendaInterfaz {
/**
* Maximo numero de contactos que puede incluir la agenda.
*/
public final static int MAX_NUM_CONTACTOS = 1000;
/**
* Inserta un nuevo contacto, proporcionandolo como parametro.
* En el caso de superar el numero maximo de contactos permitidos
* o en el caso de que ya exista un contacto con el mismo numero de telefono
* se lanzara la excepcion OperacionNoPermitidaExcepcion.
*/
public void insertarContacto(ContactoInterfaz contacto) throws OperacionNoPermitidaExcepcion;
/**
* Modifica el telefono de un contacto.
* Se proporciona como parametro el telefono del contacto a modificar
* y el nuevo telefono.
* Si el numero de telefono no existe se lanzara la excepcion
* OperacionNoPermitidaExcepcion.
*/
public void modificarTelefono(TelefonoInterfaz telefonoAntiguo,
TelefonoInterfaz telefonoNuevo)
throws OperacionNoPermitidaExcepcion;
/**
* Elimina un contacto de la agenda.
* Se proporciona como parametro el numero de telefono del contacto a eliminar
* Si el telefono indicado no esta en la agenda
* se lanzara la excepcion OperacionNoPermitidaExcepcion.
*/
public void eliminarContacto(TelefonoInterfaz telefono)
throws OperacionNoPermitidaExcepcion;
/**
* Muestra por la salida estandar (System.out) todos los contactos que hay en la
* agenda.
* El orden de salida de los datos es el siguiente:
* Numero de telefono, Nombre, Primer Apellido, Segundo Apellido, Domicilio y
* Correo electronico.
* Cada uno de estos datos debe ir en una l¡nea diferente.
* No se inserta ninguna informacion adicional a la especificada.
*/
public void mostrarContactos();
}
Cita de: yoel_alejandro en 11 Enero 2015, 16:44 PM
Hola joraloma, el problema es que la función de entrada fgets() coge el carácter de nueva línea o ENTER y lo agrega al final de las cadenas ap1, ap2, por eso al concatenar e imprimir, se imprime dicho salto de línea pareciendo como si fueran dos cadenas distintas
Una solución es depurar la cadena recibida para eliminar el salto de línea hallado al final de la misma, reemplazándolo por el carácter nulo de terminación:
size_t n;
n = strlen( ap1 );
if ( n > 0 && ap1[n-1] == '\n' ) ap1[n-1] = '\0';
y luego haces lo mismo para ap2, con lo cual debería solucionarse el problema.
Citarsalas@318CDCr12: ̃$ ./nombreCompleto
Introduzca nombre : SALIR DEL PROGRAMA
salas@318CDCr12: ̃$ ./nombreCompleto
Introduzca nombre : Fulanito
Introduzca primer apellido : de Tal
Introduzca su segundo apellido: y Cual
Nombre completo: de Tal y Cual, Fulanito
Introduzca nombre : SALIR
salas@318CDCr12: ̃$ ./nombreCompleto
Citarsalas@318CDCr12: ̃$ ./nombreCompleto
Introduzca nombre : SALIR DEL PROGRAMA
salas@318CDCr12: ̃$ ./nombreCompleto
Introduzca nombre : John
Introduzca primer apellido : Smith
Introduzca su segundo apellido:
Nombre completo: Smith
John
Introduzca nombre : SALIR
salas@318CDCr12: ̃$ ./nombreCompleto
/* Includes del sistema */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Includes de la aplicacion */
#include "nombreCompleto.h"
/* Definición de constantes */
/* Tipos definidos por el usuario */
/************************************************************/
int main()
{
char * nombre = NULL;
char * ap1 = NULL;
char * ap2 = NULL;
int tam;
char * todo=NULL;
nombre = (char *) calloc(TAM, sizeof(char));
ap1 = (char *) calloc(TAM, sizeof(char));
ap2 = (char *) calloc(TAM, sizeof(char));
if(nombre == NULL || ap1 == NULL || ap2 == NULL)
fprintf(stderr, MENSAJE_MEMORIA);
else
{
do
{
printf(PIDE_NOMBRE);
fgets(nombre, TAM, stdin);
nombre=strchr(nombre,'\n');
*nombre='\0';
if(strncmp(nombre, NOMBRE_SALIR, NCOMPARAR) != 0)
{
printf(PIDE_AP1);
fgets(ap1, TAM, stdin);
ap2=strchr(ap1,'\n');
*ap2='\0';
printf(PIDE_AP2);
fgets(ap2, TAM, stdin);
ap2=strchr(ap2,'\n');
*ap2='\0';
tam = strlen(nombre) + strlen(ap1) + strlen(ap2);
todo = (char *) calloc(tam, sizeof(char));
todo = strcat(todo, ap1);
todo = strcat(todo, ap2);
todo = strcat(todo, nombre);
printf(TEXTO_NOMBRE_COMPLETO, ap1);
printf("%d", tam);
}
}
while(strncmp(nombre, NOMBRE_SALIR, NCOMPARAR) != 0);
free(nombre);
nombre = NULL;
free(ap1);
ap1 = NULL;
free(ap2);
ap2 = NULL;
free(todo);
todo = NULL;
}
return 0;
}
/* Definiciones de funciones */