#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
:( lei sobre esa funcion de la libreria ctype pero necesito ayuda
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
corre bien pero que pasa si el usuario su numero de cedula es 20131811 , normalmente la cedula no son unidades , son millones ejemplo 20131811
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.
Usa fgets para recibir la cadena amigo esa es tu falla, scanf y gets son muy malos para cadenas.
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)