Programación General > C/C++

 Problema con un programa (Novato =D)

(1/2) > >>

rock_neurotiko:
Hola compañeros, sé que soy nuevo, pero he leido ya algunos posts, y he de advertir que estoy empezando  ^_^  asi que lo siento si mis preguntas parecen de niño (es mas, no tengo mas de 17 años xD)

----------

Para empezar, estoy haciendo un programa que simule un programa de una serie (perdidos), que, en el fondo no sirve para nada mas que para ocio, pero me viene muy bien para empezar a programar.
El programa consiste en que tu introduces un codigo, si lo introduces bien te sale una cuenta atras de 108 minutos (que para el programa lo pondria de segundos) y si lo introduces mal te respondería "error del sistema" para volver al principio.

Bien, como el numero ha introducir es muy largo (4815162342) y nisiquiera con unsigned long sirve, tuve que buscar una solucion, y esa es que hay que ir introduciendo los numeros uno a uno (4-8-15-16-23-42) con la consiguiente equivocacion en cada una.
Aqui hago alguna pregunta,¿ hay algun tipo de variable, que se me haya escapado por ahi, que pueda tener el numero entero?

He conseguido lo de los numeros uno a uno(tras unos cuarenta y cinco minutos de intento y error y pensar) y despues he conseguido que el "error del sistema" se repita unas cuantas veces para que parezca mas real.

Aquí es donde he conseguido mi programa "beta" ya que, por desgracia, todavia no tengo conocimientos para la cuenta atras. Solo quiero que me ayuden a saber qué tengo que estudiar, o qué puedo usar para poder hacer la cuenta atrás.

Aquí os dejo el código que tengo :D

--- Código: C --- #include <stdio.h> void main() {    inicio:    int bucle;    int numero4;    int numero8;    int numero15;    int numero16;    int numero23;    int numero42;    printf("**************************************************************n");    printf("***********************INICIATIVA DHARMA**********************n");    printf("**********************NUMERO DE SEGURIDAD:********************n");    printf("************************4-8-15-16-23-42***********************n");    printf("*Introducir los numeros de seguridad uno a uno pulsando Enter*n");    printf("**************************************************************n");    printf("nn");    printf(":<")  ;    scanf("%d", &numero4);     while(numero4!=4)    {   for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }    printf(":<a")  ;    scanf("%d", &numero8);    while (numero8!=8)    {for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }    printf(":<")  ;    scanf("%d", &numero15);    while (numero15!=15)    {   for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }    printf(":<")  ;    scanf("%d", &numero16);    while (numero16!=16)    {   for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }    printf(":<")  ;    scanf("%d", &numero23);    while (numero23!=23)    {   for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }        printf(":<")  ;    scanf("%d", &numero42);    while (numero42!=42)    {   for (bucle=1;bucle<=500;bucle++)    printf("22/09/2004-15:16-Error del sisteman");    goto inicio;    }    printf("nnEspere 108 minutosnnn");    goto inicio;}  

Vndecid:
Hola . Lo de la cuenta atras te la debo... pero el temita de los numeros te convendria usar una "cadena de caracteres"...
pero primero tenes que entender que es un vector....;-)!

Ya te di la "pista"...
------------------------
Tambien ese "goto" lo podrias cambair por un dowhile
y creo que podrias usarla mascara en scanf...asi
--------------------
scanf("%d-%d-%d",&numero1,&numero2,&numero3);
Pro No vas a tener que poner enter en medio de cada uno de los numeros
Contra : le llegas a errar y en vez de poner - le pones otra cosa y se clava.
--------------
Insisto lo podes hacer con una cadena de caracteres.
Existe una funcion en string.h que es strcmp. Esa funcion permite comparar dos cadenas de caracteres una ya la tenes la otra la podes pedir asi
fgets(linea,500,sdtin)  (y antes de todo eso declara char linea[500]; y char  *aux; aux=linea;
despues del fgets haces
while(*aux!='n')
  aux++;
*aux=''
y printf("%s",linea) y ya tenes tu numero echo cadena de caracteres despues haces
strcmp("numero entre comillas",linea);
si el valor es 0 las lineas son iguales

rock_neurotiko:
Muchas gracias por responder tan rapido.
Lo de la cuenta atras es algo que me esta sacando de quicio, lo he intentado con tm_min y muchos, pero no saco nada en claro...

y lo del numero largo... se lo que es un vector, pero nose como podre usarlo aqui, quizas cuando lea mas lo entendere gracias ^^

y el goto por dowhile... lo cierto es que ese goto creo que esta bien, porque he encandenado una cadena de whiles que si en alguna se produce salta el error y vuelve al principio, y si no, sigue sin saltar el error y vuelve al principio... nose, esa parte me gusta como la tenga, hasta que consiga saber si puedo poner un solo numero (4815162342) para hacer una sola sentencia while.

Gracias :D

Vndecid:
Bueno si sabes que es un vector entonces vas a entender esto:
Una cadena de caracteres es un vector que DEBE tener esta estructura (numero ascii-numero ascii-numero ascii-) donde es lo que indica el fin de la cadena.
Hasta ahi creo que entendes bien Ok?.
Tambien sabes esto:(TABLA ASCCI no me permiten poner enlaces)

Que los numero en ASCII entre el 48 y el 57 incluidos los dos son solamente numeros.
Entonces deberias  hacer una funcion que te permita entrar solo numeros (pero eso es demasiado complicado si recien empezas) o
hacaer una funcion mas o menos asi

i
--- Código: C ---int verifica(char *linea) //Devuelve un UNO si la cadena tiene un caracter distinto a un numero debe ser utilizadop con una cadena NORMALIZADA{   while(*linea!='')   {       if(*linea<48 || linea>57)            return 1;       linea++;   }return 0;} 

--- Código: C ---void normalizar(char *linea)//Saca el enter de una cadena(el n){    while(*linea!='n')         linea++;*linea='';}  
y despues en el main pones


--- Código: C ---strcmp("4815162342",linea);//Devolvera un 0 SI LAS CADENAS SON IGUALES  
acordate de poner #include<string.h>

Lo del goto....si vas a una Universidad no te dejan usar el goto indiscriminadamente ...Si, si lo se, es HERMOSO usar el goto pero existe un problema.No en este programa en particular.Despues de pasado un tiempo (1 dia) si el programa es un poco mas grande ni la persona que hizo el programa entiendo que hace el programa con muhos gotoes y es en serio ademas es una sentencia "vieja" se uitilizaba cuando no exsitian las sentencias ya armadas...
Te recomiendo ("La biblia blanca") "El lenguaje de programación c kernighan y ritchie"

Bye...

rock_neurotiko:
He leido todo lo que has puesto y he entendido algo (es normal que no comprenda todo, soy autodidacta hasta ahora que me estais enseñando =D)

El codigo que me has enseñado es para que se pueda ingresar el numero 4815162342 directamente, pero al ponerlo en mi codigo (uno nuevo, y solamente con esta para ver el funcionamiento) despues de muchos errores por mi parte he llegado a un solo error:
"Statement missing ; in function main()

el codigo es el siguiente:


--- Código: C ---#include <stdio.h>#include <string.h>void main() {    inicio:    char nt;    printf(":<")  ;    scanf("%d-%d-%d",&nt);      nt verifica(char*linea)    {     while(*linea!='')     {          if(*linea<48 || linea>57)                 return 1;          linea++;     } return 0;    } void normalizar(char *linea){      while(*linea!='n')             linea++; *linea=''; } strcmp("4815162342",linea); } 

El error me da en esta linea:


--- Código: C ---    nt verifica(char*linea)  

Lo cierto es que no se que es... :S



De todas formas, seguire aprendiendo haber si consigo aprender todo lo que me estais enseñando :D
Y me he descargado el libro que me has dicho, muchas gracias.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa