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

#1
Tengo el mismo problema que tu...
#2
Citar
#include<iostream>
using namespace std;

int main(){
   int n,i;
   cin>>n;
   i=n-1;
   while (i>0){
         i=i-1;
       
               cout<<i<<endl;}  
   
system ("PAUSE");
return 0;
}



Entonces empieza por i=n! Piensa que tu le das a i el valor n-1 (6) y luego, en la primera iteración, antes de mostrar i por pantalla, la vuelves a decrementar y tiene valor (5).

El código podria ser el siguiente:
int main(){
   int n,i;
   cin>>n;
   i=n;
   cout << n << endl; //endl sólo si quieres hacer el salto de línea, y el cout de n sólo si quieres mostrar también el valor inicial, n
   while (i>0){
         i=i-1;
       
               cout<<i<<endl;}  
   
system ("PAUSE");
return 0;
}


#3
Buenas tardes,

Estoy empezando a utilizar la libreria NCURSES.h y, después de conseguir entender como funcionan las ventanas y, cuando ya creía que había logrado mi objetivo, me he dado cuenta de lo siguiente:

CitarNi con un scanw(..), ni con un getstr(..) consigo capturar las letras mayúsculas con acentos...! Las minúsculas sí, después de haber activado las teclas especiales con keypad(stdscr,TRUE);

El código que he hecho es el siguiente:
#include <ncurses.h>
#include <string.h>


int main(void){
char text[30];
int i = 1;
WINDOW *conversa,*lectura;

initscr();
keypad(stdscr,TRUE);

lectura = subwin(stdscr,4,79,10,10);
   conversa = subwin(stdscr,4,79,23,10);
box(conversa, ACS_VLINE,ACS_HLINE);
box(lectura, ACS_VLINE,ACS_HLINE);

printw("PRIMERA APLICACIÓN CON NCURSES! \n");
refresh();

while (i!=0) {
waddstr(lectura,"INTRODUCE TU MENSAJE: ");
move(5,5);
wgetstr(lectura,text);
wprintw(conversa,"MENSAJE DE LA OTRA VENTANA: %s\n",text);
scrollok(lectura,TRUE);
scrollok(conversa,TRUE);
wrefresh(conversa);
i = strcmp(text, "FI");
}
   
delwin(lectura);
       delwin(conversa);

endwin();
return 0;
}


Gracias por todo!
#4
Buenas tardes!!!

Primero de todo tienes que tener bien claro lo que quieres que te muestre... Quieres que te muestre la série crecientemente o decrecientemente?

Tal como lo planteas en el 'enunciado', lo quieres hacer decrecientemente.

En tal caso tienes un par de cosas mal...


  • La declaración y su posterior asignación de valores de variables. Declaras una variable n, que és la que utilizas para saber en que número empieza la série. Esto está bien. Luego a la variable i, le das un valor 0... En qué quedamos, empezamos de 0 o del número mayor?  :P
  • Luego, la condición del "while" no está bien planteada en caso de querer hacer la série decreciente.
  • Y por último, la variable i, SIEMPRE tiene el mismo valor. Por que? Sencillo, n nunca cambia de valor y eso hace que i solo canvie una vez de valor (en la primera iteración).

haber si puedes corregir eso!

Hasta otra!!!
#5
Perdón, tienes razón!

Te adjunto el código, tenemos implementado dos métodos, uno que envia la información y otro que la recibe.

int MI_ProcessaLiniaLocal(int idSocketConversa){
//PRE:
//POST:

//Declaracio variables
char buffer[300],bufferEnviat[301];
int numBytes;

if((numBytes = read(STDIN,buffer,300))== -1) {
printf("Error en read()\n");
return (-1);
}
if (numBytes == 4 && buffer[0] == '/' && buffer[1] == 'f' && buffer[2] == 'i') {
printf("Has tancat la conversa.\n");
return 0;
}
else {
//FENT SERVIR EL PROTOCOL ESTABLERT, ENVIEM LA INFORMACIÓ REBUDA PER TECLAT.
bufferEnviat[0] = 'L';
int i = 0;

while (buffer[i]!='\n'){
bufferEnviat[i+1] = buffer[i];
i++;
}
if (send(idSocketConversa,bufferEnviat,numBytes,0)==-1){
printf("Error en el send()\n");
return (-1);
}
}
return 1;
}
int MI_ProcessaLiniaRemota (int idSocketConversa){
//PRE:
//POST:

//Declaracio variables
char buffer[301], bufferImprimir[300];
int numBytes;

if((numBytes = read(idSocketConversa,buffer,300)) == -1) {
printf("Error en read()\n");
return (-1);
}
else if (numBytes == 0) {
printf("L'usuari remot ha finalitzat la connexió. Fi de la conversa.\n");
return 0;
}
else {
if (buffer[0] == 'L'){
int i = 0;
while(i<numBytes-1){
bufferImprimir[i] = buffer[i+1];
i++;
}
bufferImprimir[numBytes-1] = '\0';
printf("Missatge de l'usuari remot: %s\n", bufferImprimir);
}
else {
printf("Error al rebre missatge de l'usuari remot (no segueix el protocol?)\n");
}
}
return 1;
}


Aquí adjunto mi código del main!

Citarswitch (haArribat){
            case -1:
               exit (-1);
               break;
            case -2:
               printf("Ha passat el temps màxim d'espera introduït\n");
               exit (-1);
               break;
            case STDIN:
               estat = MI_ProcessaLiniaLocal(sConnecta);
               if (estat == -1) exit (-1);
               else if (estat == 0) {
                  acabaConversa = close(sConnecta);
               }
               break;
            default:
               estat = MI_ProcessaLiniaRemota(sConnecta);
               if (estat == -1) exit (-1);
               else if (estat == 0) {
                  acabaConversa = close(sConnecta);
               }
               break;
         }

Muchas gracias por todo!!!
#6
Buenas noches a todos,

Este es mi primer post. Por lo tanto, mucho gusto de poder participar!

La cuestión es la siguiente. En clase me han pedido implementar una aplicación de mensajeria instantánia con Sockets y en lenguaje C. Todo va bien hasta que me piden que, sin interfaz gráfica, pula los mensajes que me salen en la terminal.

Que quiero decir con pulir? Por ejemplo:

El usuario local está escriviendo una línea de texto, y justo en medio de la línea, recibe una del usuario remoto. Entonces, el texto queda mezclado de la siguiente manera:
HOLA SOY EL Mensaje del usuario remoto: BIENVENIDO YANTASH REMOTO, BUENAS NOCHES.
Dónde el color azul representa la línea que estaba escribiendo el usuario local, y el rojo el usuario remoto.

Tendría que intentar evitar esto.

Ideas? Dividir terminal (no encuentro como hacerlo sin usar SCREEN), mover el cursor (luego, cuando llega al fin de la ventana se vuelve loco)... No encuentro como hacerlo!

Si alguien me pudiera ayudar se lo agradecería mucho!

Muchas gracias de antemano!!!

PD. pido perdón de antemano por si no he situado bien el post... Soy un noob!