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 - leogtz

#561
Prueba así:

fscanf(pf,"%d",&n);  
for (i=1;i<=n;i++)
fscanf(pf,"%s %c",planet_info[i-1].nombre, planet_info[i-1].cod);


La explicación de por qué falla es que con cafa fscanf() avanzas una línea, así que ibas avanzando de dos en dos.
#562
También comentar que en Windows se usa el caracter '\' para las rutas, no /, que es propio de otros SO's.
#563
Cita de: Littlehorse en  5 Julio 2011, 00:49 AM
No siempre menos lineas de código significa que este bien hecho y el goto para lo único que sirve en el 99% de los casos es para ahorrar lineas de código, esa por lo menos es mi opinión.

Que se use en Perl o en el Kernel que gusten no es una muestra de nada puesto que son programadores como todos; no puede tomarse eso como una referencia de que algo es correcto. Con el mismo criterio podemos decir que Dijkstra comento que no debería usarse y explico muy bien por que, y ¿Quien de ustedes se atreveria a decir que Dijkstra no tenia idea de lo que hablaba?.
Como verán ninguna de estas referencias pueden tomarse para probar que "esto es así sin ninguna duda" porque cada uno tiene una visión distinta; se puede estar de acuerdo o no.

Personalmente no creo que goto sea adecuado para nada, genera confusión en el código y torna al flujo del algoritmo difícil de seguir para los que deban continuar lo que uno hizo (nada mas propenso a errores que un programador que no puede entender el código base con el cual debe trabajar).

Lo del goto exit; puede aparentar valido cuando se muestra en 5 lineas pero cuando comienzan los errores, las excepciones, cuando comienza las unidades de testeo y la depuración, la historia es otra.

Estoy de acuerdo con lo que dijo Zero, es cuestión de gustos.

Saludos!

PD: Sin comentarios como gtfo ni demás porque todos tienen derecho a opinar en la forma que gusten mientras no se falte el respeto a nadie.


Sí, programadores, pero programadores muy brillantes, y si ellos usan goto es por algo, para algo les servirá, y por algo no lo hicieron de otra manera, ¿no crees?.
#564
Es que fíjate que en tu código c_temp no lo utilizas para nada (no tiene utilidad), así que con
*p = *p++
simplemente avanzamos, al igual que lo hace *p++.

for(; *p; caracter == *p ? *p = *p++ /* Simplemente avanzados*/ : (*r++ = *p++));

como no podemos poner:
for(; *p; caracter == *p ? *p++ /* Simplemente avanzados, no asignación ni nada */ : (*r++ = *p++));
porque daría error, he utilizado:
for(; *p; caracter == *p ? *p = *p++ /* Simplemente avanzados, no asignación ni nada */ : (*r++ = *p++));

Para que lo acepte el compilador.
#565
Cita de: Dark Invader en  5 Julio 2011, 00:24 AM
Nunca habia visto usar el for asi:

 for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));


¿Se puede utilizar la ultima fila del for con todo eso? :-\

Sí, queda medio críptico el código, pero más corto, pero pierde legibilidad :)
#566
Como dato interesante, ¿saben cuántos goto's hay en el código fuente de Perl?

─[0 leo@leo-945GCT-M ~/Descargas/perl-5.14.1]$
└─> find . -type f -iregex ".*c$" -exec cat {} \; | grep -i "goto" | wc -l
1430
┌─[0 leo@leo-945GCT-M ~/Descargas/perl-5.14.1]$
└─>


Perl está hecho totalmente en C y que yo sepa no tiene bugs.
#567
Cita de: raul338 en  4 Julio 2011, 22:51 PM
Nunca vi a nadie que tenga el dedo indice más alto que el dedo anular, o sea que todos la tenemos grande? :xD

+=1 , jaja

Creo que este estudio es una estupidez. En todos está esa diferencia.
#568
Me refería a esto:

#include <stdio.h>

void cortarcadena(char *frase,char caracter)
{
   char *p = frase, c_ori[30] = "", *r = c_ori;
   while(*p)
       caracter == *p ? *p = *p++ : (*r++ = *p++);
   puts(c_ori);
}

int main(void)
{
   char frase[81], c;
   printf("Frase : ");
   fgets(frase, 81, stdin);
   printf("Caracter : ");
   scanf("%c", &c);
   cortarcadena(frase, c);

   return 0;
}


Ok, una última:

void cortarcadena(char *frase,char caracter)
{
    char *p = frase, c_ori[30] = "", *r = c_ori;
    for(; *p; caracter == *p ? *p = *p++ : (*r++ = *p++));
    puts(c_ori);
}


:D
#569
Aún te puedes ahorrar una variable, no hace falta que maniobres el caracter con un puntero ya que es una sola unidad, lo puedes omitir.
#570
@Dar Invader

He probado la función, funciona (valga la redundancia), hay cosas que comentar, en primera está el indentado del código, está muy mal, debes corregirlo.

Y la función se puede acortar a esto (usando tu manera):

void cortarcadena(char *frase,char *caracter)
{
   char *p;
   char *q;
   char *r;
   p = frase;
   q = caracter;
   char c_temp;
   char c_ori[30]="";
   r = c_ori;
   while(*p)
       if(*q == *p)
           c_temp= *p++;
       else
           *r++ = *p++;
   puts(c_ori);
   getchar();
}


void cortarcadena(char *frase,char *caracter)
{
   char *p = frase;
   char *q = caracter;
   char *r;
   char c_temp;
   char c_ori[30]="";
   r = c_ori;
   while(*p)
       *q == *p ? c_temp = *p++ : (*r++ = *p++);

   puts(c_ori);
   getchar();
}