Ayudeme problema con validacion corre perfecto

Iniciado por vidalpet, 31 Octubre 2015, 20:05 PM

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

vidalpet

#include <stdio.h>
#include <ctype.h>
int main(){
int  v1=0, v2=0, v3=0, nulo=0, i=0, cant;
char dato;
int votos;

printf("numero de cedula\n");
    scanf("%c",&dato);

if(isdigit(dato)){
printf("Bienvenido\n");

printf("ingresa la cantidad de votos a contar\n");
scanf("%d",&cant);


while(i<cant){

printf("voto\n");
scanf("%d",&votos);

switch (votos){





case 1:
  v1++;
break;

case 2:
v2++;
break;

case 3:
v3++;
break;

default:
nulo++;
break;
}

i++;
}








printf("maduro %d\n",v1);
printf("diosdado %d\n",v2);
printf("leopoldo %d\n",v3);
printf("nulo %d\n",nulo);

if(v1>v2 &&v1>v3){
printf("ganoo maduro\n");
}else{
if(v2>v1 && v1>v3){
printf("diosdado\n");
}else{
if(v3>v1 && v3>v2){
printf("leopoldo ganoo\n");
}else{

}

}
}

}
else{
printf("ERROR marque su numero de cedula en valores numericos\n");
}
 

return 0;
}




tengo una duda ya estaba desesperado :( quise estudiar la funciion isdigit  pero no me salia :( despues de mas de 3 horas que m salio :( me correo pero no hace nada :( la variabel cant deberia de decir cuantas personas votaron , otra cosa necesito consejo de ustedes como aprendiendo a programar ? un metodo ? xd sufro me gusta pero sufro

vidalpet

:( lei sobre esa funcion de la libreria ctype pero necesito ayuda

class_OpenGL

#2
Aprender a programar es complicado, pues aunque sepas la teoría, siempre necesitas un montón de práctica para coger hábitos. Mi consejo es que practiques mucho, busques ejercicios de buena calidad, o que tu mismo inventes tus propios ejercicios (te aconsejo lo último). Respecto a la duda sobre el código, no veo dónde está el problema... He compilado y ejecutado el programa y he obtenido la siguiente salida:

numero de cedula
5
Bienvenido
ingresa la cantidad de votos a contar
5
voto
2
voto
4
voto
6
voto
2
voto
3
maduro 0
diosdado 2
leopoldo 1
nulo 2


¿No debería ser así?

Otro ejemplo para que veas que isdigit funciona:
numero de cedula
c
ERROR marque su numero de cedula en valores numericos


Lo que pasa es que tu código no contempla empates

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

vidalpet

corre  bien pero que pasa si el usuario  su numero de cedula es 20131811 , normalmente la cedula no son unidades , son millones ejemplo 20131811 

class_OpenGL

Lo que hace 'scanf("%c",&dato);' es leer el primer carácter del buffer de entrada. Cuando introduces un número como 1923542345, lo que introduces es una cadena de caracteres, por lo que de esa cadena tomará el 1 y el resto se quedará "como basura" (que puedes limpiar con fflush(stdin);). La solución más factible que veo es que pidas un entero, y que compruebes si está entre uno y diez.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

furciorifa

Usa fgets para recibir la cadena amigo esa es tu falla, scanf y gets son muy malos para cadenas.

class_OpenGL

El no quiere recibir una cadena... quiere recibir un carácter. Scanf no es malo para los string, solamente tienes que tener cuidado de que no recoge la línea entera, sino una palabra (las palabras están delimitadas por espacios)

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL