Autor
|
Tema: funcion recibe dos parametros (Leído 8,962 veces)
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Fire544: en la función verifica cadena tuya no recorres la cadena, por lo que no sirve(según creo yo pues si el usuario mete una cadena alfanumérica ¿como la tratarías?) , además tienes un pequeño error en el if pues el operador lógico and no es & , si no &&.Por lo demás bien.
ALONSOQ:, tu función verificaCadena también tiene un error (en mi opinión)pues solo comprobais (los dos tú y Fire) el primer carácter y dependiendo de que sea retornais , que en principio está bien , pero si el usuario mete aaaa1452345 por ejemplo ¿se tomaría como cadena o como número?
Arriba dejé unas funciones no sé si las habréis visto.
|
|
« Última modificación: 31 Agosto 2012, 20:19 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
ALONSOQ
Desconectado
Mensajes: 62
|
Fire544: en la función verifica cadena tuya no recorres la cadena, por lo que no sirve(según creo yo pues si el usuario mete una cadena alfanumérica ¿como la tratarías?) , además tienes un pequeño error en el if pues el operador lógico and no es & , si no &&.Por lo demás bien.
ALONSOQ:, tu función verificaCadena también tiene un error (en mi opinión)pues solo comprobais (los dos tú y Fire) el primer carácter y dependiendo de que sea retornais , que en principio está bien , pero si el usuario mete aaaa1452345 por ejemplo ¿se tomaría como cadena o como número?
Arriba dejé unas funciones no sé si las habréis visto.
Gracias Avesudra por tu aportación; Por seguir ya en el mismo código que he enviado si en la cadena , en lugar de poner del 1 al 3, ponemos por ejemplo del 0 al 100, es decir
for (i=0;i<3;100++){ if(cadena[i]>=65&cadena[i]<=122) return 1; else return 0;
comprobaría los 100 primeros caracteres y entonces estaría bien, ¿ no es así? gracias
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
comprobaría los 100 primeros caracteres y entonces estaría bien, ¿ no es así?
gracias
Ese código está un poco mal. - Lo primero no sabes si la posición 100 existe y te puede dar un error de SEGMENTATION_FAULT , ese famoso error del 0xC000000005.
- Segundo , no llegará a recorrer la cadena aunque sepas cuán larga es la cadena pues en cuanto compares el primer carácter sea falsa o verdadera tu condición la cual está mal por que el operador lógico and es && no &, siempre retornará ¿entiendes?.
- El operador and en la comparación está mal porque es tontería , un mismo valor , no puede cumplir dos comparaciones distintas.
Así que esa función medianamente bien sería así si quieres hacerlo por fuerza sin punteros , tienes que pasarle el largo que tiene , porque si nó da un SEGMENTATION_FAULT como una casa( si quieres mirarlo pruébalo). int verificaCadena(char cadena[],int largo) { int i = 0; while(i!=largo) { if(cadena[i]>=65 || cadena[i]<=122) ++i; else return 0; } } }
¡Un saludo!
|
|
« Última modificación: 31 Agosto 2012, 21:58 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
ALONSOQ
Desconectado
Mensajes: 62
|
Creo queme estoy haciendo un lío;
Entiendo que la función verificacadena, en la funcíón principal, analiza argv[1] y argv[2], sin embargo parece que no recorre todo el contenido, es decir tengo la duda de como recorre todos los caracteres de ambas posiciones para determinar si es número o cadena.
en tu código entiendo avesudra que recorres toda la cadena, creo que lo que haces, dentro del bucle for, lo podríamos arreglar tambien con strlen(cadena).
Lo que sí he comprobado es que si el en el segundo argumento introducimos a2 (habiendo introducido en el primero un número), devuelve que es correcto, cuando no debería.
Avesudra ¿ como integrarías tu funcíon dentro del código que tengo hecho? te importaría incluirla?
saludos
saludos
|
|
« Última modificación: 1 Septiembre 2012, 01:13 am por ALONSOQ »
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Creo queme estoy haciendo un lío;
Entiendo que la función verificacadena, en la funcíón principal, analiza argv[1] y argv[2], sin embargo parece que no recorre todo el contenido, es decir tengo la duda de como recorre todos los caracteres de ambas posiciones para determinar si es número o cadena.
en tu código entiendo avesudra que recorres toda la cadena, creo que lo que haces, dentro del bucle for, lo podríamos arreglar tambien con strlen(cadena).
Lo que sí he comprobado es que si el en el segundo argumento introducimos a2 (habiendo introducido en el primero un número), devuelve que es correcto, cuando no debería.
Avesudra ¿ como integrarías tu funcíon dentro del código que tengo hecho? te importaría incluirla?
saludos
saludos
Por los líos no te preocupes , tranquilo que se resuelve todo , claro exactamente puedes usar strlen pero como se te vé verde no te he dicho nada de eso.Te integro mi función en tu codigo : #include <stdio.h> /****************************************/ /** Retornan 0 si es verdad y -1 si no **/ /****************************************/ int verificaSiEsCadena(char *stream); int verificaSiEsNumero(char *stream); int verificaSiEsCadena(char *stream) { if(verificaSiEsNumero(stream) == -1) { return 0;//Si no es numero , retorna 0 porque es una cadena. } return -1; //Si es numero retorna -1 porque no es una cadena , es un numero. } int verificaSiEsNumero(char *stream) { while(*stream!='\0') { if(*stream<48 || *stream>57) { return -1;//Si no es numero retorna -1 } ++stream; } return 0;//Si es numero retorna 0 } int main(int argc, char *argv[]) { int i; printf("Numero de argumentos: %i\n", argc ); printf("Nombre del programa: %s\n", argv [0]); for(i=1;i<(argc); i++) { printf("Argumento numero %i: %s\n", i , argv [i ]); } if(argv[1]!=0&&argv[2]!=0) { if(verificaSiEsCadena(argv[2])==0 && verificaSiEsNumero(argv[1])==0)//Si el segundo argumento es una cadena y el segundo es un numero. { printf("Son Correctos (Numero y Cadena)!!"); } else } else }
|
|
|
En línea
|
Regístrate en
|
|
|
ALONSOQ
Desconectado
Mensajes: 62
|
Avesudra, el programa funciona perfectamente, pero hay que modificar una pequeña cosa para que de el resultado buscado, porque si no mantiene el error de 2 c2 correctos. En verificaSi es Numero: i nt verificaSiEsNumero(char *stream) { while(*stream!='\0') { if(*stream>=48 && *stream<=57)// si strema está entr 0 y 9// { return 0;//Si no es numero retorna -1 } ++stream; } return -1;
Muchas gracias por tu aportación
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Está igual ¿no? Lo único es que ahora retorna al revés
|
|
|
En línea
|
Regístrate en
|
|
|
Fire544
Desconectado
Mensajes: 85
"Escucha el sonido del 0, 1"
|
Avesudra: Claro tienes razon, pero fijate en el siguiente post, donde recorro todos los elementos, de un array que ya he concatenado. Y no estas correcto cuando dices que no recorro los argv[]; ten en cuenta que estas accediendo a punteros de caracteres no a caracteres en un array de chars, pero como quiera fijate donde hago referencia a lo que dices. Mira ALONSOQ puedes optar por concatenar los elementos de argv[] a variables chars de cualquier tamaño y luego verificar que cada posicion de este vector este en un rango de 65 >= 97 que son las posiciones del alfabeto en la tabla ASCII !!! Mira algo como esto !!! char arrays[10]; for(int i=0; i<argc; i++) { if(argv[1]!=0) { if(array[i]>=65&array[i]<=97) { } } }
A si puedes hacer con la posicion 2 de argv[] y listo, no he probado el codigo pero creo que no tendras problemas !! Suerte !!
|
|
« Última modificación: 2 Septiembre 2012, 17:35 pm por Fire544 »
|
En línea
|
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
|
|
|
xiruko
Desconectado
Mensajes: 438
|
dejo aqui mi pequeño aporte por si sirve de ayuda. solo verifica que el primer argumento sea un numero, ya que el segundo al ser cualquier cadena esta tambien puede contener numeros o ser todo numeros no? si no es asi, y el segundo parametro tiene que contener solo las letras del abecedario dimelo y modificare el codigo en un momento. #include <stdio.h> int main(int argc, char** argv) { int i; if (argc != 3) { printf("Numero de parametros incorrecto.\n"); return 1; } //primer parametro un numero for (i=0; argv[1][i]!='\0'; i++) { if (argv[1][i] < 48 || argv[1][i] > 57) { printf("Primer parametro no es un numero.\n"); return 2; } } printf("Parametros correctos.\n"); return 0; }
Entrada: ./main 123a Salida: Numero de parametros incorrecto.
Entrada: ./main 123a hola Salida: Primer parametro no es un numero.
Entrada: ./main 123 hola Salida: Parametros correctos.
un saludo!
|
|
« Última modificación: 2 Septiembre 2012, 18:01 pm por xiruko »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
funcion que devuelva 4 parametros
Programación C/C++
|
mapers
|
3
|
4,728
|
4 Diciembre 2010, 04:51 am
por mapers
|
|
|
problema parametros funcion
Programación C/C++
|
sargo
|
2
|
2,340
|
24 Marzo 2012, 00:39 am
por Beakman
|
|
|
[javascript] llamar a funcion que se recibe por parametro de la funcion
Desarrollo Web
|
Graphixx
|
0
|
6,061
|
24 Abril 2012, 19:36 pm
por Graphixx
|
|
|
Problema con parámetros que recibe main(int argc, char *argv[])
Programación C/C++
|
antkk
|
1
|
2,495
|
6 Junio 2015, 14:08 pm
por ivancea96
|
|
|
Windows 10 recibe la función Power Throttling para CPUs Intel
Noticias
|
wolfbcn
|
0
|
1,464
|
21 Abril 2017, 21:14 pm
por wolfbcn
|
|