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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  duda ejercicio en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda ejercicio en c  (Leído 2,164 veces)
ainoa94

Desconectado Desconectado

Mensajes: 1


Ver Perfil
duda ejercicio en c
« en: 5 Octubre 2014, 18:20 pm »

Buenas! Hace poco que llevo programando en c (solo llevamos dos semanas de clase). Nos han mandado una practica en la que nos piden que si no se tecleea ningun valor, la variable vale 0. Por ejemplo, se le pide al usuario que teclee el numero de horas trabajas y nos piden que si no teclea nada, el numero de horas es 0. Alguien sabría como hacerlo?

Gracias de antemano.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda ejercicio en c
« Respuesta #1 en: 6 Octubre 2014, 17:20 pm »

Para realizar esa operación lees una linea de texto con fgets, a continuación tratas de obtener el numero de la linea mediante sscanf. Si esta retorna 1 significa que el usuario introdujo el numero correctamente, caso contrario solo debes verificar si la linea consiste de espacio blanco (linea vacía, se asigna el valor predeterminado que indicas) o no (la linea contiene caracteres inválidos para la conversión).

Un ejemplo para explicarlo mejor:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. #define MAX_LINEA  1024
  6.  
  7. int main(void)
  8. {
  9.   char linea[MAX_LINEA];
  10.   int num;
  11.   int i;
  12.  
  13.   if (fgets(linea, MAX_LINEA, stdin) == NULL){
  14.      puts("Error critico!");
  15.      return EXIT_FAILURE;
  16.   }else if (sscanf(linea, "%d", &num) == 1)
  17.      printf("Entrada valida, el numero es %d\n", num);
  18.   else {
  19.      for (i = 0; isspace(linea[i]); i++)
  20.         ;
  21.  
  22.      if (linea[i] == '\0')
  23.         puts("Linea en blanco, se utiliza el valor predeterminado");
  24.      else
  25.         puts("Caracteres invalidos para la conversion!");
  26.   }
  27.  
  28.   return EXIT_SUCCESS;
  29. }

La validación de esa forma es básica y no es a prueba de errores, para eso hay que sustituir el uso de sscanf por strtol, strtoul o strtod pero como indicas que apenas empiezas con sscanf debe ser suficiente, ya veras el uso de las otras funciones mas adelante.

Y la próxima vez que tengas una duda sobre una operación en particular en C/C++ utiliza el foro correcto: Programación C/C++

Un saludo


En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en ejercicio++
Ejercicios
Lamarkus 1 3,283 Último mensaje 1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
duda con un ejercicio..
Programación C/C++
fer_fer_73 8 4,046 Último mensaje 4 Febrero 2011, 01:24 am
por negux
Duda ejercicio C
Programación C/C++
cortex123 1 1,980 Último mensaje 13 Junio 2011, 21:09 pm
por El_Java
Duda con ejercicio
Programación C/C++
bigfu 2 1,982 Último mensaje 24 Agosto 2011, 22:43 pm
por bigfu
duda con un ejercicio
Programación C/C++
Freelancer 4 2,471 Último mensaje 10 Septiembre 2011, 04:31 am
por Freelancer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines