Hola, saludos para todos.
El código que dejo a continuación es para validar que al ingresar el nombre y apellido de un alumno sea correcto.
Por el momento lo que verifico es:
Que tmp no quede vacío, si se pulsa <Enter> sin ingresar nada o si se se pulsa <Enter> después de pulsar <Espacio> una o varias veces. -
No debe haber espacios ni al principio ni al final de la frase ingresada. -
Si ingreso " Roberto" debería devolver "Roberto"
Si ingreso " Roberto " debería devolver "Roberto"
Si ingreso "Roberto " debería devolver "Roberto"
El problema lo tengo con poner el final de cadena '\0' después del último carácter, si no hay
espacios en blanco fgets lo deja perfecto pero que pasa si el ingreso es:
[0] R
[1] o
[2] b
[3] e
[4] r
[5] t
[6] o
[7]
[8]
[9] '\0'
Concretamente como harían para pasar el elemento [9] al [7]#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void get_String( char *tmp );
void ajustes( char *tmp );
void mensajeError();
int main( void ){
char tmp[30];
get_String( tmp );
return EXIT_SUCCESS;
}
void get_String( char *tmp ){
int ok, i=0, espacios=0, espIzquierda=0;
do{
ok=1;
printf("\n Ingresa el nombre completo del alumno ......:" ); ajustes( tmp );
while( tmp[i] != '\0' ){
if( tmp[i] == 32 ){
espacios++;
}else{
if( tmp[0] == 32 && espIzquierda == 0 ){
espIzquierda = i;
}
}
i++;
}
if( i == espacios ){
ok=0; espacios=0; i=0;
mensajeError();
}
}while( !ok );
if( espIzquierda > 0 ){
i=0;
while( tmp[i] != '\0' ){
tmp[i] = tmp[i+espIzquierda];
i++;
}
}
}
void ajustes( char *tmp ){
char *p = NULL;
int ch;
*p='\0';
}else{
while((ch
= getchar()) !='\n' && ch
!=EOF
); }
}
void mensajeError(){
printf( "\n El dato es obligatorio" ); printf( "\n\t Pulsa <Enter> para intentarlo nuevamente..." ); getchar(); }
Por favor, no hacer caso a las librerías incluidas que es por tantas practicas. -
Saludos.