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

#181
Hola! para la letra 'ñ' tal vez te sirva esto:
http://foro.elhacker.net/programacion_cc/problema_con_la_n-t331081.0.html

y para saber si es mayuscula o minuscula es cuestion de buscar funciones de C++. En C tenes funciones como islower(comprueba si un caracter es minuscula) y isupper(comprueba si un caracter es mayuscula), ambas de ctype.h


Saludos
#182
Programación C/C++ / Re: Poner contraseña
25 Julio 2012, 07:45 AM
Hola! no es recomendado usar fflush para stdin ya que no esta definido.

Este problema ya fue discutido muchas veces asi que voy a ser lo mas claro posible. Cuando se ingresan caracteres por teclado, estos se almacenan en un "bufer" para que luego funciones como fgets, scanf, etc tomen los caracteres de ahi.
Aclaracion 1: el ENTER(\n) tambien es un caracter, osea que tambien se almacena en el bufer
Aclaracion 2: fgets lee hasta encontrar un ENTER o como maximo n-1 caracteres
Supongamos que se ingresa esta cadena: "xDabcde\n". En este caso vos indicaste a fgets que lea 3-1 caracteres, es decir los caracteres 'x' y 'D' se almacenan en el arreglo texto. Es por esto que si se ingresa cualquier cadena, siempre y cuando empiece con "xD", imprime "contraseña correcta" (Esto seria la respuesta a tu segunda duda)

Ahora supongamos que se ingresa otra cadena: "asdfzxc\n". ¿que sucede ahora? como antes los primeros dos caracteres('a' y 's') se almacenan en texto y se imprime "contraseña incorrecta". ¿pero por que despues no podes ingresar y vuelve a imprimir "contraseña incorrecta" varias veces? Esto se debe a que en el bufer aun queda el resto de la cadena: "dfzxc\n". Para solucionar esto hay que limpiar el bufer; despues de fgets agrega:
while(getchar()!='\n'); // getchar lee del bufer hasta encontrar un '\n', osea limpia el bufer


Saludos
#183
Hola! el error que te marca es simple, vos no podes declarar una funcion con 5 parametros y luego cuando llamas a esa funcion(en el main) solo le pasas 1 como haces con medianum()

Otra cosa q debes corregir es la declaracion float num[1]. Igual el tema mas importante que te falta es el concepto de "pasaje por valor y pseudoreferencia", el cual me parece mas conveniente explicarte cuando veas punteros.
Al no saber ese tema te recomiendo que declares funciones de este tipo:
(tipo) nombrefuncion(float num[], int tam);
Es decir funciones que reciben el arreglo, el tamaño del arreglo y retornen un resultado. Te dejo algunos ejemplos:
void llenarArreglo(float num[], int tam);
void ordenar(float num[], int tam);
int minimo(float num[], int tam);
int maximo(float num[], int tam);
float mediaNum(float num[], int tam);
float median(float num[], int tam);



Saludos
#184
CitarDime alguno bueno para Linux por favor.
el gcc y un block de notas


Saludos
#185
Hola! Tenes un error en la lectura del arreglo num. La forma correcta es:
scanf("%f", &num[t]);
tenes que indicar el subindice. Lo mismo para imprimir...


Basicamente podrias separar todo el programa en funciones. Te dejo una funcion:
llenarArreglo(num, t); // llamada de la funcion

void llenarArreglo(int num[], int t) // en la funcion
{
   // RELLENAMOS LAS POSICIONES DEL VECTOR
      for (i=0;i<t;i++)
      {
         printf("Numero para el lugar %d del arreglo: ",i);
         scanf("%f", &num[t]);
      }
}


Y asi podrias crear una funcion para todos los comentarios que tenes en mayusculas

Saludos
#186
Me parece bien que estudies acerca de estructuras ya que te facilita varias cosas.
Mire otra ves el codigo y me equivoque en pasarte esto:
fseek(stock,pos-1,SEEK_SET);
tenia que ser:
fseek(stock,pos-sizeof(int),SEEK_SET);
Hay q descontar sizeof(int) a pos ya que despues de leer el codigo del archivo, el cursor se desplaza 4bytes(o 2bytes)


Compile el programa y me anda bien, te dejo las modificaciones:
En el modulo de stock
case 2:
if(op == 2)
{
printf("\n____________________________");
printf("\nBienvenidoal modulo de stock: ");
printf("\nEscoja la opcion: ");
printf("\n1 - Alta de un articulo");
printf("\n2 - Consulta de un articulo ");
printf("\n3 - Descontar stock");
printf("\n0 - Salir: ");
scanf("%d",&st);
printf("\n___________________________\n");
switch(st)
{
case 0:
return 0;
break;
case 1:
if(st == 1)
ALTAS_ARTICULOS(stock);
break;
case 2:
if(st == 2)
CONSULTA_ARTICULOS(stock);
break;
case 3:
                             printf("\nIngrese codigo del articulo: ");
                             scanf("%d",&cod);
                             printf("\nIngrese la cantidad a descontar: ");
                             scanf("%d",&cantidad);
                             DESCONTAR_STOCK(stock, cantidad, cod);
                             break;
default:
printf("\nLa opcion no es correcta ");
break;
}
break;
}


Funcion modificada:
void DESCONTAR_STOCK(FILE *stock1, int diferencia, int x)
{
int cod,cantidad,ns;//nc: nueva cantidad del articulo
float precio;
int pos;
char art[50];
stock1 = fopen("Stock.dat","r+b");
fread(&cod,sizeof(int),1,stock1);
pos=ftell(stock1);
fread(art,sizeof(art),1,stock1);
fread(&cantidad,sizeof(int),1,stock1);
fread(&precio,sizeof(float),1,stock1);
while(!feof(stock1))
{
if(x == cod)
{
ns = cantidad - diferencia;
fseek(stock1,pos-sizeof(int),SEEK_SET);
fwrite(&cod,sizeof(int),1,stock1);
fwrite(art,sizeof(art),1,stock1);
fwrite(&ns,sizeof(int),1,stock1);
fwrite(&precio,sizeof(float),1,stock1);
fseek(stock1,0,SEEK_END);
}
fread(&cod,sizeof(int),1,stock1);
pos=ftell(stock1);
fread(art,sizeof(art),1,stock1);
fread(&cantidad,sizeof(int),1,stock1);
fread(&precio,sizeof(float),1,stock1);
}
fclose(stock1);
}



Saludos
#187
Hola! creo q con sockets podes hacer lo que queres, averigua por ese lado


Saludos
#188
Q oxidado estoy con archivos :S. Entre la lectura de cod y art pone:

pos=ftell(fp); // ftell devuelve la posicion del cursor
pos es un entero. Luego si se cumple que es el codigo correcto pone:

if(comp1 == cod)
{
                        ns = cantidad - diferencia1;
                        fseek(fp,pos-1,SEEK_SET);
fwrite(&cod,sizeof(int),1,stock1);
fwrite(art,sizeof(art),1,stock1);
fwrite(&ns,sizeof(int),1,stock1);
fwrite(&precio,sizeof(float),1,stock1);
fseek(stock1,0,SEEK_END);
}



Otra cosa, algo q no me habia dado cuenta es que tanto en la lectura como la escritura pones & delante de art, lo cual creo q causa un error ya que esta demas el &
#189
GNU/Linux / Re: Script LINUX algun valiente???
16 Julio 2012, 00:20 AM
foro equivocado
#190
Hola! es como decis vos, el problema esta en sobreescribir. Cuando vos lees algo de un archivo el cursor se desplaza, por lo tanto cuando quieras guardar vas a hacerlo a partir de donde esta posicionado el cursor. Lo que tendrias que hacer es volver a posicionarte cuando se cumple comp1 == cod. Tenes que usar fseek


Fijate si te sale sino te sigo ayudando. Saludos