elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 [145] 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
1441  Programación / Programación C/C++ / Re: AYUDA funcionamiento de toupper y tolower C++ en: 6 Noviembre 2011, 01:18 am
Si en la pagina que ya te indico do-while buscas "tolower" el primer vinculo es tolower y en el se presenta un ejemplo donde se convierte una cadena (a la C) a minúsculas.

Hay que ponerle un poco mas de iniciativa ...

Un saludo
1442  Programación / Programación C/C++ / Re: problema con for en c (eliminar pila) en: 5 Noviembre 2011, 01:54 am
Si no tienes un buen libro ya es hora de conseguir uno, revisa el tema [Libros/Papers] C/C++.

El error sigue siendo el mismo que ya indico do-while:

1) Lees el numero de elementos a eliminar y almacenas este en la variable "max":
Código
  1. p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
  2. s("%d",&max);

2) Ejecutas un bucle utilizando la variable "max" como contador donde ella toma los valores 0 a "cantidad":
Código
  1. for ( max = 0; cantidad>=max; max++){
  2.   p("EL ELEMENTO %d \n", tope);
  3.   tope--;
  4.   system("pause");
  5. }

Un saludo
1443  Programación / Programación C/C++ / Re: ¿Cómo se interpretan estas instrucciones en C? en: 4 Noviembre 2011, 04:06 am
Los problemas son dos.

El importante (por dejar invalida la sentencia) es que un objeto solo puede accederse después de su declaración y esto:
Código
  1. int x += (i = fucion()) && 1;
Es equivalente a:
Código
  1. int x = x + ((i = fucion()) && 1);
Declara la variable "x" y al darle un valor inicial utiliza una variable (ella misma) cuya declaración todavía no tiene efecto.

El segundo es, aun cuando fuera valida (no lo es), su valor inicial estaría dado por una recursion infinita (el valor inicial de "x" es el valor de "x" mas ...).

Un saludo
1444  Programación / Programación C/C++ / Re: unir cadenas mediante punteros en: 4 Noviembre 2011, 02:05 am
Cuando se copia una cadena al final de otra como en el ejemplo de .::DoX::. hay dos detalles a tener en cuenta. La linea en cuestión es:
Código
  1. *str1++ = *str1;

El primero es que no es necesario copiar la cadena en si misma.

El segundo y mas pesado es el uso de "str1++" y "str1" en una expresión. Ese si es un dolor de cabeza ya que dependiendo del orden en que ellas se evalúen (y cuando aplique el efecto lateral) se pueden obtener diferentes resultados.

Por ello mejor ir con:
Código
  1. void strcat(char *s, char *t)
  2. {
  3.    while (*s != '\0')
  4.        s++;
  5.  
  6.    while ((*s++ = *t++) != '\0')
  7.        ;
  8. }

Un saludo
1445  Programación / Programación C/C++ / Re: ¿Cómo se interpretan estas instrucciones en C? en: 3 Noviembre 2011, 01:30 am
int x += (i = fucion()) && 1;      (son dos simbolos &&, no uno)
Esa declaración no es valida (no puedes utilizar "+=").

int  status = (funcion_void(), !num_int);
Aquí aplica primero el operador secuencial ',':

1) Se evalúa la expresion "funcion_void()", su resultado se descarta.
2) Se evalúa "!num_int" y ese es el resultado de la expresión.

En pocas palabras el resultado sera 0 o 1.

Un saludo
1446  Programación / Programación C/C++ / Re: exec y sus derivadas en: 2 Noviembre 2011, 04:46 am
P.S: no veo nada malo con feof, la idea era también quen si hay un error (cosa que un EOF también setea el bit), se interrumpa "el paso" de la salida al fichero ...
El problema es, tal como se utiliza en el programa, el uso de "feof" es un error lógico. Eso porque usualmente se toma a esa función como ¿Hay mas caracteres que leer? cuando debería ser ¿Que paso con la ultima operación de lectura?

Dado el bucle:
Código
  1. while(!feof(pipeOutput))
  2. {
  3.   fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
  4.   fputs(fileBuffer, fileOutput);
  5. }
Supongamos que se leen todas las lineas menos la ultima, a partir de ese momento:

1) fgets lee la ultima linea, no hay problema.
2) fputs la imprime, ídem.
3) feof no retorna verdadero ya que la ultima operación de lectura fue exitosa.
4) lectura extra con fgets falla
5) escritura con fputs (no debería)
6) feof retorna verdadero y se termina el bucle.

Como puedes ver se realiza una iteracion de mas. Para evitarlo se tendría que modificar el bucle a:
Código
  1. fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
  2. while(!feof(pipeOutput))
  3. {
  4.   fputs(fileBuffer, fileOutput);
  5.   fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
  6. }
Desde mi punto de vista es demasiado trabajo (ademas de reducir la claridad del código) cuando, para empezar, basta con simplemente verificar el valor de retorno de "fgets".

Un saludo
1447  Programación / Programación C/C++ / Re: exec y sus derivadas en: 2 Noviembre 2011, 01:39 am
Si bien es un boceto (aquí voy de metiche) hay tres detalles en ese programa.

Si la dirección en memoria del array "fileBuffer" es igual a NULL el programa ya esta mas allá de la salvación (supongo estabas pensando en reservar memoria via malloc o similar).

Para salir de la función "main" no es necesaria la llamada a "exit", basta con utilizar la sentencia "return N;".

Por ultimo es mejor (salvo excepciones) evitar la función "feof" ya que esta retorna verdadero solo después que una función de lectura falla. En su lugar es mejor (si aplica) utilizar el valor de retorno de la función, en este caso "fgets":
Código
  1. while (fgets(fileBuffer, sizeof(fileBuffer), pipeOutput))
  2.   fputs(fileBuffer, fileOutput);

Un saludo
1448  Programación / Programación C/C++ / Re: Cambiar caracteres en cadenas --en C-- en: 2 Noviembre 2011, 01:27 am
if (strchr("AEIOU", toupper(ch)) != NULL)
   ch = (++counter) + '0';
Esa fue mi primera aproximación pero falla si hay mas de nueve vocales en la cadena.

Un saludo
1449  Programación / Programación C/C++ / Re: Error al compilar en: 1 Noviembre 2011, 02:51 am
Me parece que el mensaje de error lo dice todo. Revisa con cuidado el inicio de esa linea:
Código
  1. if{     (
Lo solucionas en cuestion de segundos.

Un saludo
1450  Programación / Programación C/C++ / Re: Cambiar caracteres en cadenas --en C-- en: 1 Noviembre 2011, 02:47 am
Otra opcion es utilizando la funcion "strchr" (prototipo en <string.h>) para conocer si el caracter es vocal:
Código
  1. char cad[] = "Esta solo es una cadena de prueba";
  2. int i;
  3. int j;
  4.  
  5. j = 0;
  6. for (i = 0; cad[i] != '\0'; i++)
  7.   if (strchr("AEIOUaeiou", cad[i]) == NULL)
  8.      putchar(cad[i]);
  9.   else
  10.      printf("%d", ++j);
  11. putchar('\n');

Un saludo
Páginas: 1 ... 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 [145] 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines