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

#1091
No uses fflush ( stdin ). Esta función sólo está pensada para flujos de salida. Usada en flujos de entrada su comportamiento no está definido, puede pasar cualquier cosa.

No uses gets, es una función obsoleta por su inseguridad y está marcada a desaparecer.
#1092
Programación C/C++ / Re: CODEBLOCKS C++
27 Septiembre 2016, 08:38 AM
Te bloquea el antivirus. Desactívalo cuándo vayas a ejecutar tus programas.
#1093
Programación C/C++ / Re: Laberinto C++
26 Septiembre 2016, 20:12 PM
Vale, muchas cosas:
No compruebas que estás en los bordes del laberinto, que significa que habrías salido. Solo haces una comprobación en el while(caminfila < 11 && camincol < 11) de que no estás fuera de las dimensiones de la tabla.

Las operaciones de inicio del camino están un poco mal. Tu dices:
iniciocol = (1+rand()%(11-1));
if (iniciocol == 0) {
    iniciofila = (1+rand()%(11-1));
} else {
    iniciofila = 0;
}


inicioco nunca valdrá 0 puesto que ese 1+... ya hace que el valor sea al menos 1, con lo que nunca se entrará en el else.
De igual forma 1+rand()%(11-1) puede darse el caso de que valga 11 con lo que estarías en la esquina del laberinto, y al poder moverte solamente Sur, Este, Oeste, cualquier movimiento que hicieras te dejaría a la salida del laberinto.

Realmente te sobran variables:
iniciocol, iniciofila, fincol, finfila están de más. Puedes empezar solo con camincol y caminfila e ir actualizándolas.

En 'Creamos el camino' la operación decidir = rand%4 está mal porqué después en la elección de opciones solo tienes en cuenta los números del 0 al 2, entonces debería ser decidir = rand%3

De igual forma ahí la estructura if - else la puedes sustituir por un switch y aclararás el código, además de usar la estructura correcta para el propósito que buscas.

En 'se asignan paredes' y 'muestra el laberinto' te sales de los límites de la tabla. Deberías moverte desde 0 hasta 10 y te mueves de 0 hasta 11, tanto en horizontal como en vertical.
#1094
Este otro hiĺo
http://foro.elhacker.net/programacion_cc/solucionadoimposible_mostrar_texto_de_un_txt_en_c-t458200.0.html
está realuzando el mismo ejercicio y ya está marcado como resuelto. Pásatr por ahí a ver si puedes resolver tus dudas.
#1095
Al igual que scanf, printf tiene su técnica avanzada para formatear el texto.
Verás:
%s sabes que escribe una cadena.
%Ns siendo N un número entero constante hace que la cadena tenga como mínimo N caracteres y se alinee por la derecha. Si la cadena es más corta de lo que marca N los caracteres que faltan se rellenan con espacios.

%-Ns siendo N un número entero constante hace que la cadena tenga como mínimo N caracteres y se alinee por la izquierda. Si la cadena es más corta de lo que marca N los caracteres que faltan se rellenan con espacios.

%.Ms siendo M un número entero constante hace que se tomen de la cadena los M primero caracteres a escribir descartando los demás.

Por supuesto las dos formas se pueden mezclar:
%N.Ms
%-N.Ms

Ejemplos serían:
%5s
%-5s
%10.6s
%-10.6s

scanf y printf tienen aún muchas más opciones avanzadas. Te animo a que busques por internet su documentación y juegues con estas dos funciones. Puedes llegar a hacer muchas cosas con ellas.

Para que juegues con printf y después lo apliques en tu programa te dejo un ejemplo muy sencillo:
#include <stdio.h>

int main() {
    printf("|%15.5s|", "Mi_cadena");
   
    return 0;
}
#1096
Muy buenas. Para solucionar tu problema con las comas puedes hacer uso de una funcionalidad un poco más avanzada de fscanf. Impresión queda así:
void IMPRESION()
{
    FILE*fd;

    int doc,i=0;
    char nombre[50]={0},pais[50]={0};

    fd=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","r");

    printf("Documento\tNombre\tPais\n");
    fscanf(fd,"%d,%[^,],%[^\n]",&doc,nombre,pais);
    while(!feof(fd) && i<N)
    {
        printf("%d,%s,%s\n",doc,nombre,pais);
        fscanf(fd,"%d,%[^,],%[^\n]",&doc,nombre,pais);
        i++;
    }
    fclose(fd);
}


La cadenade control de fscanf ha cambiado un poco.
Tu idea de usar comas separadoras está bien, pues es el mismo formato que scanf va a recibir y va a desechar esas comas. El problema venía que recogías tanto nombre como país con el argumento %s que coge toda la cadena hasta que haya un espacio en blanco (tabulación, nueva línea, etc.) por lo que también te pillaba la coma.
Sin embargo haciendo uso de %[^,] le dices a fscanf: guarda la cadena hasta que encuentres el caracter coma (los corchetes indican los caracteres que debe recoger fscanf, el acento circunflejo al principio indica negación, es decir, que se debe recoger todos los caracteres hasta encontrar uno de esa lista). Así que capturarás toda la cadena hasta que llegues a la coma.
Después te encuentras la coma que vas a desechar y empieza otra captura de cadena hasta que llegue al final de ésta, el caracter de nueva línea, como marca %[^\n].
#1097
Si b está declatada como b() o b(void) no puedes porque no espera argumento alguno.
Pero, lo dicho, si b espera almenos un argumento b(int n) sí puede recibir una función que devuelva ese argumento esperado int a(), quedando de la forma que hemos dicho: b(a())
#1098
Te falta #include <time.h> al principio de código, sino no conocerá la función time.
#1099
Uno es una función sin argumentos pero cuando la llamas le pasas la función dos, lo que C no se lo espera.

Esta técnica sirve cuándo una función pide un argumento, por ejemplo un entero, ahí puedes llamar una función que devuelva un entero. Ésta última se evalúa y el valor que retorna es el que usará la primera función.

Por ejemplo
int a() {
    return 3;
}

void b(int num) {
    printf("num = %d", num);
}

// ...
// Llamada a b pasando a como argumento
b(a());
#1100
Crea un array de cadenas con cada color.
Crea una variable índice con valor 0.
Bucle mientras no se haya pulsado una tecla:
    Muestra el contenido de la posición índice.
    Suma 1 al índice.
    ¿Índice está fuera del array?
        Dar valor 0 a índice.
Fin del bucle.