Comando personalizado que limpie pantalla

Iniciado por el_lujo, 5 Septiembre 2014, 20:23 PM

0 Miembros y 2 Visitantes están viendo este tema.

el_lujo

Saludos.
Estoy comenzando a estudiar programación.
Tengo la siguiente tarea:
Debo hacer una aplicacion en c++ que limpie la pantalla.
Requisitos:
-Que el comando que limpie la pantalla sea "limpiar".
-Que sin importar que se escriba mayuscula o minúscula haga la función sin reventarse.

Honestamente no se nada y el profesor lo que quiere es que investiguemos; se vale buscar ayuda porque en el curso se discutirá. Lo que no puedo es llegar sin el resultado.

Gracias de antemano.

Nota: Admito que según el reglamento no se hacen tareas. Solo  estoy interesado en la ayuda de cómo debo interpretar usar una palabra como comando.

Gracias de nuevo.

ivancea96

Supongo que system("cls"); o system("clear"); no vale, no?

Puedes escribir 100 saltos de linea, o invocar a la Api del SO para limpiar la consola.

el_lujo

#2
Gracias por responder.

No vale de esa manera. Así se lo expusieron algunos de los compañeros.

En realidad, lo que tenemos que aprender es a crear una instrucción que haga lo mismo que system("cls") sin importar las mayusculas o minusculas.




Bueno.
Debo esforzarme.
Reduciré la situación con lo siguiente:
Cómo controlo que lo que yo digite en mayusculas se convierta en minusculas?

rir3760

Cita de: el_lujo en  5 Septiembre 2014, 20:23 PMEstoy comenzando a estudiar programación.
Tengo la siguiente tarea:
Debo hacer una aplicacion en c++ que limpie la pantalla.
Requisitos:
-Que el comando que limpie la pantalla sea "limpiar".
-Que sin importar que se escriba mayuscula o minúscula haga la función sin reventarse.
Te piden que desarrolles un programa que acepte un argumento mediante la linea de comandos, verifique que sea igual a "limpiar", "LIMPIAR", "Limpiar", etc. (no hay distinción entre mayúsculas y minúsculas) y finalmente realice la operación indicada (limpiar la pantalla).

Para el primer paso utiliza el motor de búsqueda para revisar los temas relacionados con el paso de argumentos mediante la linea de comandos.

Para el segundo de nuevo utiliza el motor de búsqueda pero ahora para encontrar temas relacionados con las funciones tolower y toupper.

El ultimo paso no se debería realizar ya que si apenas empiezas deberías estar enfocado en la base (C++ estándar) y no en como realizar una operación especifica del SO (coméntale eso en buen plan a tu profesor).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

ivancea96

http://support.microsoft.com/kb/99261/es

Ahí te da una explicación de como hacerlo (Windows).

Si quieres hacerla más corta, puedes escribir 100 lineas en blanco, y luego colocar el cursor en el 0,0 (en el link, en el último código, abajo, aparece cómo hacerlo).


Acerca de lo de escribir en minúsculas... Modificarlo al tiempo en que lo escribes?

el_lujo

Saludos, amigos.

Fuente de lo que el profesor nos puso:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


void Mayusc_Minusc(char *s) //convertir de Mayuscula a minuscula
{
   for( ; *s != '\0' ; s++)
   {
      if(*s >= 'A' && *s <= 'Z'){
         *s += (char)32;
      }
      
   }
}




int main(){
   char limpiar[20] = "limpiar", cerrar[15] = "salir", limpiarLinux[15] = "clear", limpiarWind[15] = "cls", ayuda[15] = "help",cadena[20],dirwindow[15]="dir",lslinux[15]="ls",dirdominica[15]="directorio";
   printf("\t\t***************************************************\n");
   printf("\t\t\t Programa Limpiar Pantalla \n \t\t\tPara Cerrar Escribir (salir)\n");
   printf("\t\t***************************************************\n\n");
   
   do{
      printf(">> ");
      gets(cadena);
   (   Mayusc_Minusc(cadena);)*/
      if(strcmp(cadena,limpiar) == 0 || strcmp(cadena,limpiarLinux) == 0 || strcmp(cadena,limpiarWind) == 0){
         system("cls");
         printf("\t\t************************************************\n");
         printf("\t\t\t Pantalla(Ms-DOS)(Terminal)(Domincana)\n");
         printf("\t\t************************************************\n\n");      
      }else if(strcmp(cadena,ayuda) == 0){
         system("cls");
         printf("\t\t********************************************\n");
         printf("\t\t Comandos Del Sistema: \n");
         printf("\t\t (limpiar)(clear)(cls) <--> Comando para limpiar\n");
         printf("\t\t (salir) <--> Comando para salir\n");
         printf("\t\t (help) -- Comando para ayuda\n");
         printf("\t\t (dir)(ls)(directorio) <----> Comando para directorio\n");
         printf("\t\t********************************************\n\n");
      }else if(strcmp(cadena,dirwindow) == 0 || strcmp(cadena,lslinux) == 0 || strcmp(cadena,dirdominica)){
         printf("\t\t********************************************\n");
         printf("\t\t\t Lista de Archivos en El Directorio\n");
         printf("\t\t********************************************\n");
         system("dir");
      }else{
         printf("\t!!! ERROR Comando no Validos.. Entrasr a (help) para ayuda\n");
      }
      
      
   }while(strcmp(cadena,cerrar) != 0);
   
   
}

Ahora bien, lo que él pide es controlar los espacios en blanco accidentales que cuando se digite cualquier opción en el programa.

Estuve googleando y no pude encontrar ayuda o simplemente no estoy haciendo la pregunta correcta.

Gracias.

Caster

Y digo yo, ¿no se puede hacer que cuando introduzca la orden se ejecute system("cls") o system("clear"), según corresponda?

Un saludo

el_lujo

Gracias, Caster por el interés en ayudarme.
Lo que sucede, Caster, es que estamos en tratar de entender cómo funcionan los sistemas operativos.  Eso es sólo para darnos a entender el por qué no debemos usar el comando interno del lenguaje, sino hacer una aplicación que simule los comando internos del lenguaje.

Adjunté el fuente del programa que fue hecho por el profesor en el aula; el reto es ahora que cuando elijamos una de las opciones dentro de la corrida del programa, ignore los espacios en banco.

Ejemplo: Si elegimos "cls" y por error digitamos: "  cls" o "cls    " en el prompt, haya una función que ignore esos espacios en blanco, siempre y cuando lo digitado corresponda a una de las opciones.

Espero haber sido explícito.

Gracias.

Caster

Pues si no me equivoco, el código que has aportado hace lo que he dicho, ejecuta el comando del SO y no hace nada más.

Un saludo

eferion

Cita de: Caster en 10 Septiembre 2014, 16:44 PM
Pues si no me equivoco, el código que has aportado hace lo que he dicho, ejecuta el comando del SO y no hace nada más.

Un saludo

doy fe de ello:


if(strcmp(cadena,limpiar) == 0 || strcmp(cadena,limpiarLinux) == 0 || strcmp(cadena,limpiarWind) == 0){
  system("cls");
  // ...
}else if(strcmp(cadena,ayuda) == 0){
  system("cls");
  // ...
}else if(strcmp(cadena,dirwindow) == 0 || strcmp(cadena,lslinux) == 0 || strcmp(cadena,dirdominica)){
  // ...
  system("dir");
}else{
  printf("\t!!! ERROR Comando no Validos.. Entrasr a (help) para ayuda\n");
}