Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#1441
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
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":
p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
s("%d",&max);


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


Un saludo
#1443
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:
int x += (i = fucion()) && 1;
Es equivalente a:
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
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:
*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:
void strcat(char *s, char *t)
{
    while (*s != '\0')
        s++;
   
    while ((*s++ = *t++) != '\0')
        ;
}


Un saludo
#1445
Cita de: bichovis en 31 Octubre 2011, 23:09 PMint x += (i = fucion()) && 1;      (son dos simbolos &&, no uno)
Esa declaración no es valida (no puedes utilizar "+=").

Cita de: bichovis en 31 Octubre 2011, 23:09 PMint  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 C/C++ / Re: exec y sus derivadas
2 Noviembre 2011, 04:46 AM
Cita de: [Alex] en  2 Noviembre 2011, 03:05 AMP.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:
while(!feof(pipeOutput))
{
   fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
   fputs(fileBuffer, fileOutput);
}

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:
fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
while(!feof(pipeOutput))
{
   fputs(fileBuffer, fileOutput);
   fgets(fileBuffer, sizeof(fileBuffer), pipeOutput);
}

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 C/C++ / Re: exec y sus derivadas
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":
while (fgets(fileBuffer, sizeof(fileBuffer), pipeOutput))
   fputs(fileBuffer, fileOutput);


Un saludo
#1448
Cita de: LearningSpanishProgrammer en  1 Noviembre 2011, 20:35 PMif (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 C/C++ / Re: Error al compilar
1 Noviembre 2011, 02:51 AM
Me parece que el mensaje de error lo dice todo. Revisa con cuidado el inicio de esa linea:
if{     (
Lo solucionas en cuestion de segundos.

Un saludo
#1450
Otra opcion es utilizando la funcion "strchr" (prototipo en <string.h>) para conocer si el caracter es vocal:
char cad[] = "Esta solo es una cadena de prueba";
int i;
int j;

j = 0;
for (i = 0; cad[i] != '\0'; i++)
   if (strchr("AEIOUaeiou", cad[i]) == NULL)
      putchar(cad[i]);
   else
      printf("%d", ++j);
putchar('\n');


Un saludo