Foros del Web » Programación para mayores de 30 ;) » C/C++ »

validar si el usuario ingreso la letra P o M

Estas en el tema de validar si el usuario ingreso la letra P o M en el foro de C/C++ en Foros del Web. hola muy buenas a todos, estoy aprendiendo a programar en C y estoy haciendo este pequeño programa : #include <stdio.h> int main() { int pesoestibador=71, ...
  #1 (permalink)  
Antiguo 22/05/2016, 14:22
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
validar si el usuario ingreso la letra P o M

hola muy buenas a todos, estoy aprendiendo a programar en C y estoy haciendo este pequeño programa :

#include <stdio.h>

int main()
{
int pesoestibador=71, niveles=0, pesocarton=3,cantbaquelas=16, pesoinicial=0, pesofinal=0, pesobruto=0, baquelas=0;
float pesobaquela = 0.3;
char tipoestiba;

printf("Escriba peso inicial: ");
fflush(stdout); //vacíamos el buffer de salida
scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable

printf("Escriba tipo de estiba p(plastico)m(madera): ");
scanf("%s",tipoestiba); //guardamos el valor introducido en la variable

printf("Escriba cantidad de niveles en la estiba (1,2,3 etc...): ");
scanf("%d",&niveles); //guardamos el valor introducido en la variable

if (tipoestiba=="p" && pesoinicial>=150){
baquelas=niveles*16;
pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+pesoe stibador);
pesobruto=pesofinal-pesoestibador;
printf("El Peso neto con estiba de plastico es %d. \n, El Peso bruto con estiba de plastico es %d. \n, La cantidad de elementos es %d. \n, ", pesofinal, pesobruto, baquelas);
}
else if(tipoestiba=="m" && pesoinicial>=150){
baquelas=niveles*16;
pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+pesoe stibador);
pesobruto=pesofinal-pesoestibador;
printf("El Peso neto con estiba de madera es %d. \n, El Peso bruto con estiba de madera es %d. \n, La cantidad de elementos es %d. \n, ", pesofinal, pesobruto, baquelas);
}
else
printf("Error, tiene que ingresar un numero mayor o iguala 150 he ingresar tipo de estiba P(plastico) M(madera) ");


return 0;
}

al compilarlo me sale este error:

warning: comparison between pointer and integer
else if(tipoestiba=="m" && pesoinicial>=150){

la idea es que en ese if se verifique si el usuario ingreso la letra M o la letra P y asi proceder, pero no se como hacerlo bien.
Otra duda que tengo es como hacer que el programa vuelva a a empezar una vez se realizen las operaciones, osea que no se tenga que volver a ejecutar que simplemente una vez mueistra los datos finales en pantalla uno presiones una tecla y vuelva a al comienzo donde le pide los datos al usuario, espero me entiendan y muchas gracias.
  #2 (permalink)  
Antiguo 23/05/2016, 00:51
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: validar si el usuario ingreso la letra P o M

En C las cadenas de texto se delimitan con comillas dobles (" "), mientras que los caracteres individuales lo hacen con comillas simples (' ').

Diferenciar entre ambos tipos es importante porque, como deberías saber, las cadenas de caracteres finalizan con un caracter nulo, mientras que un carácter suelto es simplemente eso, el carácter y nada más.

Código C:
Ver original
  1. if (tipoestiba=='p' && pesoinicial>=150){

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 23/05/2016, 13:36
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: validar si el usuario ingreso la letra P o M

hola, gracias por responder hice lo que me dijiste
pero me sale esto:

warning: comparison between pointer and integer
else if(tipoestiba =='m' && pesoinicial>=150)
  #4 (permalink)  
Antiguo 23/05/2016, 14:51
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: validar si el usuario ingreso la letra P o M

Deberías poner el código completo. lo que has puesto es insuficiente para detectar errores.

E intenta está vez poner el código decorado con la opción correspondiente del desplegable "highlight"

Edito: para leer caracteres de la consola hay que usar %c en vez de %s. %s es para leer cadenas de caracteres.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #5 (permalink)  
Antiguo 24/05/2016, 13:32
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: validar si el usuario ingreso la letra P o M

hola, ps este es el codigo completo que tengo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     int  niveles=0, pesocarton=3,cantbaquelas=16, pesoinicial=0, pesobruto=0, baquelas=0, pesofinal=0;
  6.     float pesobaquela = 0.3;
  7.     char tipoestiba[2];
  8.    
  9.     printf("Escriba peso inicial: ");
  10.     fflush(stdout); //vacíamos el buffer de salida
  11.     scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable
  12.    
  13.     printf("Escriba tipo de estiba p(plastico)m(madera): ");
  14.     scanf("%c",tipoestiba); //guardamos el valor introducido en la variable
  15.    
  16.     printf("Escriba cantidad de niveles en la estiba (1,2,3 etc...): ");
  17.     scanf("%d",&niveles); //guardamos el valor introducido en la variable
  18.    
  19.     if (tipoestiba =='p' && pesoinicial>=150){
  20.         baquelas=niveles*16;
  21.         pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+ 71 + 33);
  22.         pesobruto=pesoinicial- 71;
  23.         printf(" El Peso neto con estiba de plastico es %d. \n El Peso bruto con estiba de plastico es %d. \n La cantidad de elementos es %d. \n ", pesofinal, pesobruto, baquelas);
  24.     }
  25.     else if(tipoestiba =='m' && pesoinicial>=150){
  26.         baquelas=niveles*cantbaquelas;
  27.         pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+ 71 + 20);
  28.         pesobruto=pesoinicial - 71;
  29.         printf(" El Peso neto con estiba de madera es %d. \n El Peso bruto con estiba de madera es %d. \n La cantidad de elementos es %d. \n ", pesofinal, pesobruto, baquelas);
  30.     }
  31.     else
  32.      printf("Error, tiene que ingresar un numero mayor o iguala  150 he ingresar tipo de estiba P(plastico) M(madera) ");
  33.  
  34.  
  35.     return 0;
  36. }

y este es el error que me da l aconsola :

main.c:19:17: warning: comparison between pointer and integer
if (tipoestiba =='p' && pesoinicial>=150){
^
main.c:25:21: warning: comparison between pointer and integer
else if(tipoestiba =='m' && pesoinicial>=150){
  #6 (permalink)  
Antiguo 24/05/2016, 16:03
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: validar si el usuario ingreso la letra P o M

tipoestiba está declarado como un array de carácteres pero no lo usas como tal.
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 25/05/2016, 00:39
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: validar si el usuario ingreso la letra P o M

Cita:
Iniciado por Malenko Ver Mensaje
tipoestiba está declarado como un array de carácteres pero no lo usas como tal.
Pero es que en su primer ejemplo estaba declarado como char... se ve que lo estropeó con ediciones posteriores
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 25/05/2016 a las 00:46
  #8 (permalink)  
Antiguo 25/05/2016, 09:19
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: validar si el usuario ingreso la letra P o M

holas gracias por tomarse el tiempo de responder,

ya solucione lo de ese error, pero ahora tengo otro problema, en esta parte del codigo

Código C:
Ver original
  1. printf("Escriba tipo de estiba p(plastico)m(madera): ");
  2.     scanf("%c",tipoestiba); //guardamos el valor introducido en la variable

cuando pongo en scanf %c, no me deja ingresar el valor, simplemente pasa a la siguiente operacion y si la cambio a scanf %d, ya me deja ingresar valor, pero en la parte de validacion con los if, no me valida nada y pasa directamente al else.


Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     int  niveles=0, pesocarton=3,cantbaquelas=16, pesoinicial=0, pesobruto=0, baquelas=0, pesofinal=0;
  6.     float pesobaquela = 0.3;
  7.     char tipoestiba;
  8.    
  9.     printf("Escriba cantidad de niveles en la estiba (1,2,3 etc...): ");
  10.     scanf("%d",&niveles); //guardamos el valor introducido en la variable
  11.    
  12.     printf("Escriba peso inicial: ");
  13.     scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable
  14.    
  15.     printf("Escriba tipo de estiba p(plastico)m(madera): ");
  16.     scanf("%c",tipoestiba); //guardamos el valor introducido en la variable
  17.    
  18.    
  19.     if (tipoestiba =='p' && pesoinicial>=150){
  20.         baquelas=niveles*16;
  21.         pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+ 71 + 33);
  22.         pesobruto=pesoinicial- 71;
  23.         printf(" El Peso neto con estiba de plastico es %d. \n El Peso bruto con estiba de plastico es %d. \n La cantidad de elementos es %d. \n ", pesofinal, pesobruto, baquelas);
  24.     }
  25.     else if(tipoestiba =='m' && pesoinicial>=150){
  26.         baquelas=niveles*cantbaquelas;
  27.         pesofinal=pesoinicial-((baquelas*pesobaquela)+(pesocarton*niveles)+ 71 + 20);
  28.         pesobruto=pesoinicial - 71;
  29.         printf(" El Peso neto con estiba de madera es %d. \n El Peso bruto con estiba de madera es %d. \n La cantidad de elementos es %d. \n ", pesofinal, pesobruto, baquelas);
  30.     }
  31.     else
  32.      printf("Error, tiene que ingresar un numero mayor o iguala  150 he ingresar tipo de estiba P(plastico) M(madera) ");
  33.  
  34.  
  35.     return 0;
  36. }

espero averme explicado bien, apenas estoy aprendiendo y me es de mucha ayuda sus opiniones.
  #9 (permalink)  
Antiguo 25/05/2016, 09:27
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: validar si el usuario ingreso la letra P o M

scanf modifica el valor de las variables. Para poder obrar esa magia necesita recibir punteros.

En el caso de un string no hay problema puesto que el tipo es, por definición, un puntero:

Código C:
Ver original
  1. char* cad;
  2. scanf("%s",cad);

Pero para el resto de tipos nativos la cosa cambia porque no son punteros. En este caso tenemos que pasar una referencia a la variable:

Código C:
Ver original
  1. char c;
  2. scanf("%c", &c);

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #10 (permalink)  
Antiguo 26/05/2016, 18:37
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: validar si el usuario ingreso la letra P o M

muchas gracias sirvio lo que dijiste, he estado probando moviendo cositas mientras aprendo, pero ahora surge otro problema a la hora de mostrar los resultados de las operaciones matematicas no son las que espero, salen numeros distintos a los que deberia y en esta parte

Código C:
Ver original
  1. baquelas=niveles*16;
Código C:
Ver original
  1. printf("\n La cantidad de elementos es: %d \n", baquelas);

me dice que la cantdad de elementos es cero, al parecer no esta leyendo esos datos pero antes si lo hacia hehe
La cantidad de elementos es: 0

este es el codigo completo
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     int  niveles, pesocarton, pesobruto, baquelas, pesofinal,pesoelementos;
  6.     float pesobaquelas;
  7.    
  8.     char c;
  9.     printf("Escriba cantidad de niveles en la estiba (1,2,3 etc...): ");
  10.     scanf("%d",&niveles); //guardamos el valor introducido en la variable
  11.    
  12.     printf("Escriba tipo de estiba p(plastico)m(madera): ");
  13.     scanf("%s",&c); //guardamos el valor introducido en la variable
  14.    
  15.        
  16.     if (c =='p' ){
  17.         int pesoinicial=0;
  18.          printf("Escriba peso inicial de la bascula: ");
  19.     scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable
  20.        
  21.         baquelas=niveles*16;
  22.         pesobaquelas=baquelas*0,3;
  23.         pesocarton=3*niveles;
  24.         pesoelementos= 71 + 33 + pesobaquelas + pesocarton;
  25.         pesofinal=pesoinicial-pesoelementos;
  26.         pesobruto=pesoinicial - 71;
  27.        
  28.         printf("\n EL peso inicial es: %d", pesoinicial);
  29.         printf("\n El peso neto con estiba de plastico es: %d", pesofinal);
  30.         printf("\n El peso bruto es: %d", pesobruto);
  31.         printf("\n La cantidad de elementos es: %i \n",  baquelas);
  32.     }
  33.     else if(c =='m' ){
  34.         int pesoinicial=0;
  35.          printf("Escriba peso inicial de la bascula: ");
  36.     scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable
  37.        
  38.         baquelas=niveles*16;
  39.         pesobaquelas=baquelas*0.3;
  40.         pesocarton=3*niveles;
  41.         pesoelementos= 71 + 20 + pesobaquelas + pesocarton;
  42.         pesofinal=pesoinicial-pesoelementos;
  43.         pesobruto=pesoinicial - 71;
  44.        
  45.         printf("\n EL peso inicial es: %d", pesoinicial);
  46.         printf("\n El peso neto con estiba de madera es: %d", pesofinal);
  47.         printf("\n El peso bruto es: %d", pesobruto);
  48.         printf("\n La cantidad de elementos es: %d \n", baquelas);
  49.        
  50.     }
  51.     else
  52.      printf("Error, tiene que ingresar un numero mayor o iguala  150 he ingresar tipo de estiba P(plastico) M(madera) ");
  53.  
  54.  
  55.     return 0;
  56. }
  #11 (permalink)  
Antiguo 26/05/2016, 21:22
Avatar de SrKaesar  
Fecha de Ingreso: mayo-2016
Ubicación: Venezuela
Mensajes: 9
Antigüedad: 8 años
Puntos: 0
Respuesta: validar si el usuario ingreso la letra P o M

Hola. Solo te corregí el caso para 'p'

primero: los pesos no pueden ser negativos, las restas estan al reves.
segundo: no es 0,3 sino 0.3 recuerda que los girngos usan es el punto
tercero: pesoelemento debe ser float tambien
cuarto: &c es para leer o mostar UN caracter y %s es para una CADENA de caracteres
quinto: los scanf no te guardan los datos por el tema del buffer. Te recomiendo simplemente agregar un \n en el scanf
ultimo: Lo mas importante, te recomiendo ampliamente que sea limpio y ordenado con tu codigo. Los espacio y las sangrias son muy importante. Te ayudará a encontrar errores tontos de tipeo. No es solo por estetica. Es muy necsario. Te ahorrará mucho tiempo


Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3.  
  4. int main()
  5. {
  6.     int  niveles, pesocarton, pesobruto, baquelas, pesofinal, pesoelementos, pesoinicial = 0;
  7.     float pesobaquelas;    
  8.     char c;
  9.    
  10.     printf(" Escriba cantidad de niveles en la estiba (1,2,3 etc...): ");
  11.     scanf("\n%d", &niveles); //guardamos el valor introducido en la variable
  12.  
  13.     printf(" Escriba tipo de estiba p(plastico)m(madera): ");
  14.     scanf("\n%c",&c); //guardamos el valor introducido en la variable
  15.        
  16.            
  17.     if (c =='p' ){
  18.        
  19.         printf(" Escriba peso inicial de la bascula: ");
  20.         scanf("\n%d",&pesoinicial); //guardamos el valor introducido en la variable
  21.        
  22.        
  23.         baquelas = niveles * 16;
  24.         pesobaquelas = baquelas * 0.3; // float
  25.         pesocarton = 3 * niveles;
  26.         pesoelementos = 71 + 33 + pesobaquelas + pesocarton;
  27.         pesofinal = pesoelementos - pesoinicial;  
  28.         pesobruto = 71 - pesoinicial;
  29.        
  30.         printf("\n EL peso inicial es: %d", pesoinicial);
  31.         printf("\n El peso neto con estiba de plastico es: %d", pesofinal);
  32.         printf("\n El peso bruto es: %d", pesobruto);
  33.         printf("\n La cantidad de elementos es: %i \n",  baquelas);
  34.     }
  35.     else if(c =='m' ){
  36.         int pesoinicial=0;
  37.          printf("Escriba peso inicial de la bascula: ");
  38.     scanf("%d",&pesoinicial); //guardamos el valor introducido en la variable
  39.        
  40.         baquelas=niveles*16;
  41.         pesobaquelas=baquelas*0.3;
  42.         pesocarton=3*niveles;
  43.         pesoelementos= 71 + 20 + pesobaquelas + pesocarton;
  44.         pesofinal=pesoinicial-pesoelementos;
  45.         pesobruto=pesoinicial - 71;
  46.        
  47.         printf("\n EL peso inicial es: %d", pesoinicial);
  48.         printf("\n El peso neto con estiba de madera es: %d", pesofinal);
  49.         printf("\n El peso bruto es: %d", pesobruto);
  50.         printf("\n La cantidad de elementos es: %d \n", baquelas);
  51.        
  52.     }
  53.     else
  54.      printf("Error, tiene que ingresar un numero mayor o iguala  150 he ingresar tipo de estiba P(plastico) M(madera) ");
  55.  
  56.  
  57.     return 0;
  58. }

Etiquetas: char, ingreso, int, letra, numero, programa, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:00.