[Ayuda][C++] Se saltea el primer comando

Iniciado por sabeeee, 1 Febrero 2015, 02:09 AM

0 Miembros y 1 Visitante están viendo este tema.

sabeeee

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);
}
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

engel lex

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?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

sabeeee

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?
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

sabeeee

Ninguna, MinGW, justo hoy estaba utilizando Code::Blocks pero después no lo use mas.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

engel lex

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]
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

sabeeee

#6
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;
}
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

flony

jajaj me encanto la musica
pero el de visual es mejorcito
si un problema no tiene solucion entonces no es un problema...es algo inevitable