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 - n-utz

#131
Programación C/C++ / [C] Lectura de caracter
13 Septiembre 2016, 01:52 AM
[SOLUCIONADO]: Tenia cargado el buffer de alguna manera, entonces cuando llegaba el scanf, agarraba cualquier caracter, la solucion fue poner, antes del scanf, un getchar() para que se encargue de eso.

Buenas noches, acá una vez más odiando C y el scanf, a ver si me dan una mano.

Hace tiempo postee que tenía problemas con leer caracteres, tenía dos variables de caracteres, que leían solo una vez durante el programa con el scanf, me leía el problema y el segundo lo ignoraba, lo solucioné gracias a un colega de acá que me dijo que implemente el getchar(), para el retorno si no me equivoco.

Ahora, tengo un problema similar, la diferencia es que meto un scanf que lee caracteres dentro de un for, por lo tanto va a tener que leer caracteres diferentes cuantas veces como diga el usuario.

El problema es que no lee ni la primera vez, y no entiendo por qué. Acepto cualquier consejo, si es necesario reemplazar scanf por otra función lo hago, pero intenté con getchar y tampoco puedo, les dejo las líneas del problema..


int main()
{
   char abc[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
   int cc, i, j, num;
   char aux;

//LECTURA DE OTRAS VARIABLES COMO CC, Y DECLARACION DE COD

for(i=0;i<cc;i++){
       printf("Ingrese el %d caracter: ", i);
       scanf("%c", &aux);
       getchar();
       printf("\n%c", aux);
       for(j=0;j<26;j++){
           if(abc[j]==aux)aux=abc[j];
       }
       cod[i]=aux;
   }
#132
Programación C/C++ / Re: [C] La duda eterna
5 Septiembre 2016, 18:46 PM
Igualmente no se me soluciona el problema ya que las funciones quedan cargadas con el tablero anterior, por mas que lo inicialice dentro de un bucle.
#133
Programación C/C++ / Re: [C] La duda eterna
5 Septiembre 2016, 02:50 AM
Cita de: n-utz en  5 Septiembre 2016, 02:39 AM
[...]
EDITO: Ya me acordé como era, debes especificar siempre el tamaño del segundo parámetro del array, es decir las columas. EJ void funcion(array[][4]);


Gracias, pero...

Ahora tengo otra duda, el programa es un TATETI, que esta relleno de numeros el usuario elige el numero donde este sera reemplazado por el simbolo del jugador, una vez que gana, el programa pregunta si se desea volver a jugar, mi idea es colocar alli un llamado a main para que comience el juego nuevamente pero debo limpiar el tablero, es decir llenar el array nuevamente con los numeros originales y no lo podria estar haciendo, al imprimirlo por primera vez lo imprime con los numeros, pero cuando entra en la funcion de comprobacion de si hay ganador, este lo confirma directamente con el tablero viejo.



Tengo que leerme punteros, es algo pendiente hace rato, aca cite mi comentario con mi nuevo problema, te adjunto el codigo lo mas reducido que pueda, a ver si me ayudas.


void movimientox(char movi, char tateti[][3]);

int main(){

char tateti[3][3]= {'1','2','3','4','5','6','7','8','9'};
int i,j;

char mov, mov2, jugar;

for(i=0;i<3;i++){
        printf("\t");
    for(j=0;j<3;j++){
        printf("%c",tateti[i][j]);

    }
    printf("\n");
}
while(!termina(ganador, tateti)){
printf("\nJuega jugador X\t");
fflush(stdout);
scanf("%c", &mov);
getchar();
movimientox(mov, tateti);
termina(ganador, tateti);
ganador=termina(ganador, tateti);
if(ganador){
    printf("GANO EL JUGADOR X, FELICITACIONES!\n");
    system("pause");
    system("cls");
    printf("Desea volver a jugar? Y/N"  );
    fflush(stdout);
    scanf("%c", &jugar);
    switch(jugar){
        case 'Y': main();
        case 'y': main();
        case 'N': break;;
        case 'n': break;}
}

void movimientox(char movi, char tateti[][3]){
    int x, y;

    for(x=0;x<3;x++){
        printf("\t");
    for(y=0;y<3;y++){
        if(tateti[x][y]==movi)tateti[x][y]='X';

        printf("%c", tateti[x][y]);
    }
    printf("\n");
}}


Coloque solo la parte de la funcion en cuestion, definida arriba.
#134
Programación C/C++ / Re: [C] La duda eterna
5 Septiembre 2016, 02:39 AM
Así lo hice y nada, te adjunto el main reducido con la función más reducida del programa[..]

EDITO: Ya me acordé como era, debes especificar siempre el tamaño del segundo parámetro del array, es decir las columas. EJ void funcion(array[][4]);


Gracias, pero...

Ahora tengo otra duda, el programa es un TATETI, que esta relleno de numeros el usuario elige el numero donde este sera reemplazado por el simbolo del jugador, una vez que gana, el programa pregunta si se desea volver a jugar, mi idea es colocar alli un llamado a main para que comience el juego nuevamente pero debo limpiar el tablero, es decir llenar el array nuevamente con los numeros originales y no lo podria estar haciendo, al imprimirlo por primera vez lo imprime con los numeros, pero cuando entra en la funcion de comprobacion de si hay ganador, este lo confirma directamente con el tablero viejo.

#135
Programación C/C++ / [C] La duda eterna
5 Septiembre 2016, 02:13 AM
Buenas noches gente, tengo una duda, estoy con un programa en el cual paso un array bidimensional de caracteres.

La cosa es que al pasarlo como pasaría un array unidimensional, en la función no es reconocido. La pregunta puntual es:

¿Cómo paso un array bidimensional de caracteres definido dentro del main a una función?. Había solucionado este problema poniendolo como variable global, pero quiero hacerla local.

Si es necesario apunto el código.
#136
Programación C/C++ / Re: Ayuda error en codigo
5 Septiembre 2016, 02:10 AM
A mi punto de vista el error está en las comillas, si estamos hablando de C, para asignar o comparar strings se utilizan las comillas simples ' ', no dobles. Prueba modificando eso.
#137
Programación C/C++ / Re: [C] Duda con bucle
1 Septiembre 2016, 23:20 PM
Cierto, me faltaba esa parte, pero seria lo mismo que poner asi if(termina(ganador)), no lo hago porque de esa manera entra nuevamente a la funcion, por lo que imprime nuevamente el printf.

El problema de porque imprimi dentro de la funcion es para diferenciar rapidamente el ganador. De ultima deberia cambiar eso.
#138
Programación C/C++ / Re: [C] Duda con bucle
1 Septiembre 2016, 23:13 PM
Si exactamente eso, bueno veo que esa parte no podre modificarla, entonces expongo otra duda.

Mando una variable local de main, llamesmola vof en falso, a una funcion booleana que la cambia a verdadero. Todo esto surge dentro del WHILE, y que justamente es el flag de este.

Ahora al devolver la variable vof a main, deberia aplicarla al famoso, "if(vof)break;", pero me obvia la variable, como si seguiria en falso. Ya intente poniendola en global, algun consejo? Adjunto codigo.

while(!termina(ganador)){
printf("\nJuega jugador X\t");
fflush(stdout);
scanf("%c", &mov);
getchar();
movimientox(mov);
termina(ganador);
if(ganador)break;

printf("\nJuega jugador O\t");
fflush(stdout);
scanf("%c", &mov2);
getchar();
movimiento0(mov2);
termina(ganador);
}


bool termina(bool ganador){  //FUNCION
    int x, y;

    for(x=0;x<3;x++){
    y=0;
    if(tateti[x][y]==tateti[x][y+1] && tateti[x][y]==tateti[x][y+2]){
        if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!");
        if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!");
        ganador=true;
        }}

for(y=0;y<3;y++){
    x=0;
    if(tateti[x][y]==tateti[x+1][y] && tateti[x][y]==tateti[x+2][y]){
        if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!");
        if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!");
        ganador=true;
    }}

    return (ganador);

    }



Se que no es recomendable imprimir o leer en una funcion, pero es un programa sencillo y no quise explayarlo mucho mas.
#139
Programación C/C++ / [C] Duda con bucle
1 Septiembre 2016, 22:39 PM
Buenas, tengo una duda sencilla, la cosa es que dentro de un while tengo dos bucles.

Primer bucle si se cumple, cambia el "flag" del while por lo que debería terminar allí y no ejecutarse el segundo bucle. La cosa es que al cumplirse el primer bucle y cambia correctamente el flag, primero ejecuta el segundo bucle y luego termina el WHILE.

Ahora mi pregunta, ¿existe alguna manera de que se lea la condicion del WHILE dentro de este sin que sea con un IF?. Es más que nada una duda para ampliar conocimientos, y no meter IF's donde no sea necesario. Porque me parece ridículo tener un WHILE y salir de este mediante una condición.

Gracias!
#140
Iba a postear, pero leí este post y tengo la misma duda.

Me estaba pasando exactamente lo mismo con los scanf, el primero pedia un dato y el segundo era ignorado. Al leer este post reemplacé ambos por getchar(), y me sigue sucediendo lo mismo, el primero lo lee y el segundo es ignorado.

El código es sencillo, no creo que haga falta postearlo, simplemente quiero pedir dos caracteres por teclado, el primero lo hago sin problemas, el segundo es ignorado.

EDITADO: Veamos, "solucione" como decian arriba, poniendo un getchar luego de cada scanf para que procese el enter, pero mi duda ahora es. Usando getchar unicamente sin scanf me seguia sucediendo lo mismo, tiene el mismo problema que scanf? que funcion me conviene usar para pedir caracteres?