Problema con programa en lenguaje C

Iniciado por RojoVGA, 6 Marzo 2017, 00:49 AM

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

RojoVGA

#include <conio.h>
#include <stdio.h>
#include <string.h>


//programa de vectores donde muestra el elemento mayor




int main(){

int a,b,i,aux;
int vector[50];

printf("Ingrese la opcion deseada\n 1.- Generar vector\n 2.- Salir\n Opcion: ");

scanf("%5000['32'-'255'%[A-Z%[a-z%[^1-2]]]]d",&a);

if(a=='2'){

printf("Hasta luego");

}else if(a=='1'){

printf("Ingrese el tamaño del vector: \n");

scanf("%5000['32'-'255'%[A-Z%[a-z%[^0-9]]]]d",&b);

for(i=0;i<b;i++){

do{

printf("Ingrese el elemento del %d elemento: \n",i+1);

scanf("%d",&vector[i]);

if(aux<vector[i]){


aux=vector[i];

}

}while(aux<aux);

}


printf("el elemento de mayor valor es: %d",aux);


}else{

printf("el valor ingresado es invalido");

}

}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

A ver, ¿qué intentaste decir con ese argumento del scanf?

RojoVGA

Es una simple validación, donde le digo que ingrese solo el numero 1 o 2, aparte le digo que no acepte otro valor como lo son de la a-z y tampoco que la acepte en mayúscula A-Z, y por ultimo que no me agarre símbolos, por ello le pongo el código ascii desde el 32 (que es el espacio) hasta el ultimo símbolo que es 255, y lo de los 5000 es los caracteres q me agarrara, ya que cuando escribía 1s, me agarraba la opción 1 cosa q no debería pasar. (obviamente se ve que ando aprendiendo pero ya he hecho casi de todo, tengo otras formas de validarlo pero no me agarran tampoco :S).

MAFUS

Ok. La construcción está mal hecha. Intentas anidar expresiones y eso no está permitido,  hasta donde yo sé.

Después intentas hacer que scanf recoja y guarde un dato numérico cuando tratas con una cadena. El argumento [ indica a scanf que el dato va a ser una cadena. Esa d al final solo indica a scanf que en el buffer va a haber una d al final de todo que debe ser ignorada.

Usa otra técnica.

Por ejemplo recoge una cadena de X caracteres y después mira si tiene más de 1 caracter, si es así da un mensaje de error.
Después miras si ese carácter es un dígito, da un mensaje de error.
Al final tendrás el caracter para comparar con el if. O lo conviertes a un número y podrás usar un switch para facilitar futuras ampliaciones del menú.