Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: sabeeee en 1 Febrero 2015, 02:09 AM

Título: [Ayuda][C++] Se saltea el primer comando
Publicado por: sabeeee en 1 Febrero 2015, 02:09 AM
Resulta que estaba en minecraft y me encontré un cubito (?, resulta que el error de mi programa es el siguiente, yo pongo el archivo que deseo y no sale, probe con if, con while y da el mismo resultado pero no interpreta la primera linea. Tengan en cuenta que es mi primer programa. Lo mas extraño es que antes de unas modificaciones funcionaba de 10. Parece que esta peor que los glitchs del GTA V.

Código (cpp) [Seleccionar]
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <ctime>
//#include <windows.h> Por si se quiere un sleep

using namespace std;

FILE *archivo;
  FILE *ccmd;
char *pos;
char lineas[150];

// DICCIONARIO DE PROCEDIMIENTOS, PARA SIMPLIFICAR:
/*
void fscls(){
fprintf(ccmd,"\tcout << string(50, '\\n');\n");
}
void fsfin(){
fprintf(ccmd,"\texit (0) ;\n");
}
void fspaus(){
fprintf(ccmd,"\tgetchar();\n");
}
void fsAboWhi(){
lineas[0] = '\0';
} */
void ArchCheq( FILE *fili,int n){
if (fili == NULL){
cout << "Error de archivo ("<< n << ")" << endl;
exit(1);
}
}

int main( int argc, char **argv) {
clock_t inicio,fin;
inicio=clock();
               // Fix para que el programa no falle si no tiene comandos
if ( argc < 3 ) {
cout<<"Ejemplo: programa \"Archivo a Abrir.cmd\" -c \"ArchivoSaliente.c\" "<<endl;
return 1;
}
if ( !strcmp( argv[2], "-c" ) ) {
archivo = fopen(argv[1],"r");
ccmd = fopen(argv[3],"wt");
}else{
cout << "Ejemplo: programa \"Archivo a Abrir.cmd\" -c \"ArchivoSaliente.c\" "<< endl;
}
//Verificacion
ArchCheq(archivo,1);
ArchCheq(ccmd,2);

while (!feof(archivo))
{
fgets( lineas, 150, archivo ); //LEE EL ARCHIVO LINEA POR LINEA.
if ((pos=strchr(lineas, '\n')) != NULL) *pos = '\0'; //AGREGA CARACTER NULO

// INTERPRETADOR:
// PAUSAS
if (!strcmp(lineas,"PAUSE>NUL")){
fprintf(ccmd,"\tgetchar();\n");
lineas[0] = '\0';
}
if (!strcmp(lineas,"PAUSA>NUL")){
fprintf(ccmd,"\tgetchar();\n");
lineas[0] = '\0';
}

if (!strcmp(lineas,"PAUSE")){
fprintf(ccmd,"\tcout << \"Presione una tecla para continuar.\" << endl;\n");
fprintf(ccmd,"\tgetchar();\n");
lineas[0] = '\0';
}

if (!strcmp(lineas,"PAUSA")){
fprintf(ccmd,"\tcout << \"Presione una tecla para continuar.\" << endl;\n");
fprintf(ccmd,"\tgetchar();\n");
lineas[0] = '\0';
}

// EXIT, FALTA PARA ESPECIFICAR.
if (!strcmp(lineas,"EXIT")){
fprintf(ccmd,"\texit (0) ;\n");
lineas[0] = '\0';
}
if (!strcmp(lineas,"SALIR")){
fprintf(ccmd,"\texit (0) ;\n");
lineas[0] = '\0';
}

// SECTOR PARA LIMPIAR PANTALLA
if (!strcmp(lineas,"CLS")){
fprintf(ccmd,"\tcout << string(50, '\\n');\n");
lineas[0] = '\0';
}
if (!strcmp(lineas,"CLEAR")){
fprintf(ccmd,"\tcout << string(50, '\\n');\n");
lineas[0] = '\0';
}
if (!strcmp(lineas,"LIMPIAR")){
fprintf(ccmd,"\tcout << string(50, '\\n');\n");
lineas[0] = '\0';
}

// Sistema complejo
//ECHO
if (strncmp (lineas,"ECHO",1) == 0) // Si se verifica la existencia procede a procesar la linea
{
char ECHO[] = "ECHO ";
int posicion = strlen( lineas ) - strlen( strstr( lineas, ECHO  ) );

/* // copiar la primera linea (no es necesario en este caso)
for( int a = 0; a < posicion; a++ )
lineas[ a ] = lineas[ a ];
*/
//copia la segunda linea
for( int a = posicion; a < strlen( lineas ); a++ )
lineas[ a ] = lineas[ a+5 ]; // 5 es el tamaño del ECHO
fprintf(ccmd,"\tcout << \"%s\" << endl;\n",lineas);
lineas[0] = '\0';

}
if (!strcmp(lineas,"\0"))
{
}else{
fprintf(ccmd,"\t%s\n",lineas); // SI NO COINCIDE CON NINGUNO LO IMPRIME EN C/C++ (MUY BETA).
}
// Sleep(100); requiere windows.h
  }
fclose(archivo);
fclose(ccmd);

cout << "\x5C\x5C Interpetracion finalizada \x5C\x5C" << endl;
fin=clock();
printf("Tiempo transcurrido: %f segundos\n", (fin-inicio)/(double)CLOCKS_PER_SEC);
}
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: engel lex en 1 Febrero 2015, 02:13 AM
como que se salta el primer comando?

intentaste correrlo en el debugger y ponerle watch a las variables involucradas a ver que pasaba?

en que linea del programa que posteaste ves que da el error?
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: sabeeee en 1 Febrero 2015, 02:32 AM
Cita de: engel lex en  1 Febrero 2015, 02:13 AM
como que se salta el primer comando?

intentaste correrlo en el debugger y ponerle watch a las variables involucradas a ver que pasaba?

en que linea del programa que posteaste ves que da el error?

En ninguna, dar warnings que no tienen nada que ver, ¿y eso del debugger que es, cual se recomienda?
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: engel lex en 1 Febrero 2015, 02:35 AM
que ide usas?
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: sabeeee en 1 Febrero 2015, 02:43 AM
Ninguna, MinGW, justo hoy estaba utilizando Code::Blocks pero después no lo use mas.
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: engel lex en 1 Febrero 2015, 02:49 AM
yo uso netbeans (casi igual que code::blocks)... no es malo y me sirve para java. c,c++, php, etc...

el punto es...

el debugger es una herramienta integrada en el compilador, que en el ide que te permite ver la ejecución de tu código paso a paso (no se como usarlo fuera del ide) literalmente verás el cursor linea a linea, le puedes configurar saltos y puedes ver las variables en tiempo real....

creo que este video explica en general lo que hay que saber del debugger en code::blocks... sin voz y con musica de serie tipo magical girl de fondo
[youtube=640,360]https://www.youtube.com/watch?v=k7z07eRIsl0[/youtube]
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: sabeeee en 1 Febrero 2015, 03:05 AM
a ok perfecto, gracias, voy a probar ese netbeans y el debugger, de seguro el error debe ser mínimo y no me doy cuenta.
EDITO: jajajaja literalmente cuando lo compile, con el Code::Blocks a mano se inicio y me dio error directamente desde Windows.


//Fix para evitar el problema.
     if ( argc < 3 ) {
cout<<"Ejemplo: programa \"Archivo a Abrir.cmd\" -c \"ArchivoSaliente.c\" "<<endl;
return 1;
}
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: engel lex en 1 Febrero 2015, 03:09 AM
probablemente... siempre los debuggers son muy utiles porque algunas veces los errores son tonterías de usar un - donde iba un +, o una "y" donde uba una "x" y te ayuda a visualizar el paso a paso y donde metiste la pata
Título: Re: [Ayuda][C++] Se saltea el primer comando
Publicado por: flony en 1 Febrero 2015, 03:12 AM
jajaj me encanto la musica
pero el de visual es mejorcito