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

#51
Programación C/C++ / variable global
12 Febrero 2017, 03:55 AM
Hola, si quiero declarar estas variables globales

int D1=2;
int D2 = D1-2;

int main(int argc,char* argv[])
{
}

porque me manda un error el compilador aqui int D2 = D1-2; ?
dice initializer const is not constant
#52
Programación C/C++ / punto medio en cmd
12 Febrero 2017, 03:38 AM
Hola en el siguiente codigo, alguien me podria explicar estas lineas

Citar#define PTO_MEDIO(s) (40 - strlen((s))/2 )

Citarprintf("%*s",PTO_MEDIO(texto) - 1," ");

No entiendo en la primera por que es 40 - ... si para el punto medio se supone que deberia ser una suma,

en la segunda no entiendo por que se le resta 1 al resultado :l

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

#define ANCHO_MAX 80
#define PTO_MEDIO(s) (40 - strlen((s))/2 )

int main(int argc,char* argv[])
{
    char texto[79]; /*78 caracteres + '\0'*/
    int i,j;

    do{
        printf("Introduce un texto: ");
        fflush(stdin);
        fgets(texto,79,stdin);
        if(strlen(texto)==78)
        {
            if(texto[77]=='\n')
                texto[77]='\0';
        }
        else
            texto[strlen(texto)-1]='\0';
    }while(strlen(texto)==0);

    printf("\n");

    /*

    Ponemos 5 filas y strlen(texto) + 2 columnas

    Esto se puede cambiar introduciendo variables para crear un tabla con otras dimensiones

    */

    for(i=0;i<5;i++)
    {
        if(strlen(texto)<77)
            printf("%*s",PTO_MEDIO(texto) - 1," ");

        if(i==0 || i==4)
            for(j=0;j< strlen(texto) + 2;j++)
                printf("*");
        else if(i==2)
        {
            printf("*%s*",texto);
        }
        else
        {
            printf("*%*s*",strlen(texto)," ");
        }

        if(strlen(texto)<78)
            printf("\n");
        /*else se llega al final de la linea y automaticamente el cursor pasa a estar en la
        primera posicion de la siguiente linea*/
    }

    printf("\n");
    system("PAUSE");

    return 0;
}
#53
era para saber si estaba bien la logica del porque da ese error XDD pero gracias de todos modos
#54
Amigo, mira comente mi codigo, segun lo que tu me explicaste, me podrias decir si esta correcto


#include <stdio.h>
#include <stdlib.h>

int main()
{
char str[30] = "2030300 This is test";

char *ptr;
long ret;
printf("\nLa cadena inicial es: %c%s%c\n",34,str,34);

ret = strtol(str, &ptr, 10); //en simples palabras strtol recibe una cadena que tenga numero y palabra (en ese orden) y el numero que tenga adelante lo retorna como long int, y la palabra siguiente de la cadena la pasa a otra cadena
printf("\nThe number(unsigned long integer) is %ld\n", ret);
printf("String part is |%s|\n", ptr); //ojo que a la cadena le agrego el espacio despues del ..300 This..


//Que pasa si pongo un char ? por la premisa de que el nombre de un arreglo es un puntero a la dir de mmeoria del primer elemento (la misma la dir de todo el arreglo)
char prueba[20];
ret = strtol(str, &prueba, 10);
printf("\nProbando: %c%s%c\n",34,prueba,34);
/* Da error eso se debe a que para empezar porque Conceptualmente no puedes modificar la dirección de un arreglo, ya que strotl lo que hace es
devuelve, además del número, la dirección del primer elemento que se ha encontrado que no es dígito, o sea de vuelve la direccion de "(espacio)", espacio por que antes de "This" hay un espacio.
como un arreglo se comporta ocmo puntero pero No lo es, lo que estaria diciendo es que prueba ahora apunta a la dir de memoria del "espacio" pero no se puede
si es puntero lo que estoy diciendo en el caso de ptr es que ptr apunta a la dir de memoria de "espacio", es decir p= "dir de memoria del "espacio""
*/

  return(0);
}

#55
grnde hermano , muchas gracias, me quedo claro
#56
Cita de: class_OpenGL en 11 Febrero 2017, 23:16 PM
No, una de las cosas que hace strtol es guardarte en la dirección que le pasas la dirección del primer elemento después del número.

No te entendi eso muy bien amigo, cuando dices "la direccion del primer elemento despues del numero" podrias detallarlo un poco mas, graciass
#57
Hola gracias por responder, pero con strtol no estoy modificando la direccion del puntero simplemente llenandolo. poniendo caracteres dentro

Ademas yo lei en una parte que decia, "los arreglos se puede decir que son punteros disfrazados"  ya que el nombre de un arreglo es un puntero a la direccion de memoria del primer elemento del arreglo (que es la misma dir del arreglo), es por eso que cuando
si tengo

char prueba[20];
char *p ;

puedo usar %s de la misma forma que en ambos, printf("%s y %s",prueba,p);
porque prueba se comporta como un puntero. me explico ? entonces no entiendo porque aca no se puede pasar la dir de memoria del arreglo
#58
Hola tengo este codigo, se supone que la funcion strtol recibe u puntero doble, pero se supone que la cadena "prueba" es un puntero que apunta  ala direccion de memoria del primer elemento de la cadena, o sea es como si le estuviera pasando la dir de un puntero, no se si me explico , de todos modos no me funciona :/ da un warning

#include <stdio.h>
#include <stdlib.h>

int main()
{
char str[30] = "2030300 This is test";
char prueba[20];
char *ptr;
long ret;
printf("\nLa cadena inicial es: %c%s%c\n",34,str,34);

/*  long int strtol(const char *str, char **endptr, int base)
//strtol converts the initial part of the string in str to a long int value according to the given base.
whose value is set by the function to the next character in str after the numerical value.
*/
ret = strtol(str, &ptr, 10);
printf("\nThe number(unsigned long integer) is %ld\n", ret);
printf("String part is |%s|\n", ptr);

ret = strtol(str, &prueba, 10);
printf("\nProbando: %c%s%c\n",34,prueba,34);

  return(0);
#59
Cita de: ivancea96 en  9 Febrero 2017, 23:40 PM
Oh sí. La única peculiaridad es la de la constante. A parte de eso, eres libre.

cual seria la constante hermano ?

CitarComo en los códigos de arriba lo hicisteis todo con malloc, pues por si acaso xD

ah jajaj Tu dices para haberlo hecho asi como dices tu adentro del for?

int main()
{
int i,j;
char *vector[50];

vector = (char**)malloc(2*sizeof(char*));

for(i=0; i<2; i++)
   {
       printf("Ingrese una palabra: ");
       scanf("%s",vector[i]);
   }


en vez de haber pedido memoria con malloc asi ?

int main()
{
int i,j;
char **vector;

vector = (char**)malloc(2*sizeof(char*));

for(i=0; i<2; i++)
   {
       vector[i] = (char*)malloc(100*sizeof(char));
       printf("Ingrese una palabra: ");
       scanf("%s",*(vector+i));
   }


:P, otra cosa, no se como funcione este foro, pero no hay manera de darte puntos o algo xd ? tus respuestas siempre me resuelven las dudas que tengo ::)
#60
Cita de: ivancea96 en  9 Febrero 2017, 23:22 PM
No se debe modificar una cadena literal ("abc"). El comportamiento de esto no está definido. Hay compiladores que colocan la cadena en una zona de memoria de solo-lectura, por ejemplo.

Para leer nuevos datos, tendrás que reservar nueva memoria.

Por cierto, depende de las necesidades pero, también se puede hacer esto con un array:

#include <stdio.h>

int main(){
    char str[50];

    scanf("%s", str);

    printf("%s", str);
}


De lo primero no tenia idea que no se pued modiifcar una cadena definida como "cosa" pero si se puede hacer es pedir un scanf para una cadena y luego volver a pedir otro scanf para la misma cadena y ahi que si se reemplace ?

y de lo segundo que me dijiste de este codigo
#include <stdio.h>

int main(){
    char str[50];

    scanf("%s", str);

    printf("%s", str);
}


Tu pusiste , "por ciento tambien se puede trabajar asi" pero yo en verdad siempre los trabajo asi XD , cual seria la otra forma de leerlo completo e imprimirlo completo ?
ojala me entiendas hermano, saludos!