duda ejercicio en c

Iniciado por ainoa94, 5 Octubre 2014, 18:20 PM

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

ainoa94

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.

rir3760

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:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX_LINEA  1024

int main(void)
{
   char linea[MAX_LINEA];
   int num;
   int i;
   
   if (fgets(linea, MAX_LINEA, stdin) == NULL){
      puts("Error critico!");
      return EXIT_FAILURE;
   }else if (sscanf(linea, "%d", &num) == 1)
      printf("Entrada valida, el numero es %d\n", num);
   else {
      for (i = 0; isspace(linea[i]); i++)
         ;
     
      if (linea[i] == '\0')
         puts("Linea en blanco, se utiliza el valor predeterminado");
      else
         puts("Caracteres invalidos para la conversion!");
   }
   
   return EXIT_SUCCESS;
}


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
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