PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  56318 - CONSEGUIR VALOR DE RETORNO DE GETCH()
Autor:  itzi mr
Estoy escribiendo un programa en C que tiene que recoger unos caracteres sin necesidad de pulsar el enter, por lo que se me obliga a usar getch().Como la cantidad de caracteres no es fija y tengo q leer todos los caracteres, necesito hacer un bucle hasta leer el ultimo de ellos.
Si continuo leyendo con getch una vez que no quedan caracteres en el buffer, el programa se queda esperando porque getch es una funcion bloqueante.

Necesitaria una funcion del estilo de nodelay (que deshabilita el caracter bloqueante de la funcion)en Unix pero para Windows Xp, o algun bucle que me leyese los datos hasta el final sin que el programa se quedase runeando.

Gracias.
  Respuesta:  eider mauricio aristizabal erazo
no te entendi muy bien pero creo que te serviria utilizar un ciclo con la funcion kbhit()
http://www.conclase.net/c/Borland/funcion.php?fun=kbhit

bye

    Pregunta:  56496 - COMO PASAR UN INT A CHAR EN C (UNIX)
Autor:  Juan
Hola a todos,

soy nuevo en esto de la programacion. Estoy intentando recoger un numero de un archivo que capturo con un fscanf y lo asigno a una variable int.

Esta variable la opero y el resultado necesito guardarlo como char.
El problema que tengo es que no consigo hacer el cast de ninguna manera

char linealeida[1];
int i;
en un while con la instrucción (fscanf(arxivoentrada, "%i", &linea) voy recogiendo sin problemas todas las lineas, hasta aquí ningun problema
el problema es que despues de operarlo sumandole o restandole algo, intento hacer esto:

lineafinal = scanf("%s", &linea);

o directamente

lineafinal = (char*) linea;

y me dice al compilarlo tipos incompatibles de asignacion.

Podeis ayudarme?

Gracias por adelantado
  Respuesta:  nayumi orama
Tienes varios errores de concepto.

En tu variable char linealeida[1] estás reservando espacio para un sólo caracter, por lo que sólo podrás guardar valores de 0 a 9, y luego no podras utilizar la libreria estandar de manejo de cadenas de caracteres al faltarte el caracter de fin de cadena .

En este caso, necesitas un sprintf

    Pregunta:  56537 - COMO HACER UNA FUNCIÓN RECURSIVA?
Autor:  Juan Reyes
Saludos, mi problema es que la función tiene que leer un número y volterlo ej. si entro 123 que devuelva 321.
  Respuesta:  Alberto Ramón Márquez
Buenas,
he realizado recursivamente ese ejercicio. Lo he compilado en windows con Devc++ y aquí tienes el código:

// Voltear número recursivamente
// @author Alberto Ramón Márquez

#include <iostream>
using namespace std;

int VoltearNumero(int n){
// Caso base, cuando n es igual a cero
// Como no debe de hacer nada en el caso base se omite
if( n != 0){
// Mostrar última cifra
cout << n%10;
// Llamamos de nuevo a la función recursiva con una cifra menos
VoltearNumero(n/10);
}
}

// Lo probamos
int main(){
int n;
cout << "Introduce numero a voltear: ";
cin >> n;
cout << "Numero volteado: ";
VoltearNumero(n);
cout << endl;
system("pause");
}

    Pregunta:  56964 - DEV C++ BUSCO INSTRUCCION PARA CONTROLAR PUERTOS
Autor:  Juan Pablo Candia
hola amigos, estoy buscando la instruccion en c++ para controlar los puertos serie, esta la de bioscom, pero la probe y no funciono, y me dijeron por que esa instruccin solo funciona en ms dos, pero que si existe una instruccion pare correrlo desde windows, espero que ustedes sepan cual es.

por favor ayudenme
  Respuesta:  Marcos Sanchez
Si utilizas Windows XP, es posible que tengas problemas, ya que el mismo sistema, bloquea los puertos, existen algunos programas que desbloquean los puertos, pero en realidad no conozco ninguno que sea "confiable", pero busca y encontrarás.

Con respecto a la función bioscom solo puede pasar un caracter por vez cada vez que se la llama, no una cadena de caracteres por cada vez que se la llama, esta función se utiliza para enviar caracteres de control al puerto serie. Si lo que quieres es enviar caracteres por el puerto serie puedes usar la función outportb:
Sintaxis:
void outportb(int portid, unsigned char value);

También hay funciones de controles de puertos en la librería "conio.h" pero nuevamente te digo NO SE SI TE FUNCIONARÁ BIEN EN XP.

Bueno espero que esto pueda ayudarte de algo, saludos!

    Pregunta:  57573 - INTERRUPCIONES EN C PARA LEER ESPACIO LIBRE EN DISCO DURO Y
Autor:  Francisco Vasquez
Hola me dirijo atentamente a ustedes por un codigo fuente que estoy buscando que determina crear un programa que permita ver el espacio libre en la unidad C y el espacio total en la unidad C usando C.
De Antemano Muchas Gracias
  Respuesta:  rodrigo nannig
tienes que usar las funciones GetDiskFreeSpace y GetDiskFreeSpaceEx,
existen otras funciones de la mano de estas como,
GetLogicalDriveStrings, que devuelve las unidades de tu pc
GetVolumeInformation, tipo de formato - nombre del disco y algo mas

Aqui te envio unos links que te podrian ser de utilidad

http://support.microsoft.com/kb/231497/es
http://www.todoexpertos.com/categorias/ciencias-e-ingenieria/ingenieria-informatica/respuestas/545142/c-y-las-api-de-windows

    Pregunta:  57968 - TEMPORIZADORES EN C:
Autor:  leticia gab
Buenas, tengo que implementar un programa en lenguaje C. Que maneje 2 temporizadoes; osea que cada 10seg. imprima una cosa y cada 14 seg. otra. Y los 2 temporizadores NO arrancan al mismo tiempo.
Se alguien sabe como empezar lo agradecería porque yo no tengo idea

saludos y gracias
leticia
  Respuesta:  Omar Sandoval
eso se hace con sleep saludos.

    Pregunta:  58228 - RESERVAR MEMORIA EN TURBO C++
Autor:  Pajaro Osella
tengo un problema programando en turbo c++. tengo las siguientes lineas:

unsigned char *memoria;
..
..
..
memoria=(unsigned char *)malloc(65536)
if(!memoria){
printf("No se puedo reservar tanta memoria");
getch();
exit(1);
}

lo q estoy intentando hacer es reservar un bloque de 64 kb de memoria, pero cuando lo ejecuto el programa,

memomira me devuelve NULL debido a q no pudo reservarse tanta memoria. por que pasa esto!??!?!?
supongo que el error debe estar en la configuracion del compilador. estoy trabajando con un modelo de programa

standard y 64 kb de heap. por favor si alguien puede ayudarme se lo agradeceria eternamente!
  Respuesta:  Francisco Rogles
Supongo que se trata de una version para DOS. Si es asi, el problema es que, con un heap de 64 Kb, no puedes reservar un bloque de 64 Kb de memoria, ya que estarias intentando coger todo el heap. Ademas, probablemente el argumento para malloc (el numero de bytes que quieres reservar) sea un numero entero de 16 bits, el cual puede tomar valores de 0 a 65535. Si utilizas 65536, has provovado un desbordamiento de entero, con lo cual te ha cogido el valor cero y, logicamente, al intentar reservar 0 bytes te devuelve NULL.

Te sugiero las siguientes comprobaciones:

1. Utiliza el modelo HUGE de memoria. Este modelo permite reservar bloques de memoria de mas de 64 Kb (pero el tamaño de cada elemento debe ser una potencia de 2).

2. No recuerdo si era Turbo C o Microsoft C, uno de ellos (o los dos, hace mucho que no trabajo con DOS) tenian funciones especiales para manejar la memoria en bloques grandes. Comprueba en la ayuda de tu compilador si tienes una funcion llamada halloc, o xalloc (o algo parecido). Si es asi, probablemente podras saltarte los puntos restantes.

3. Comprueba el tamaño del tipo (unsigned int) de tu compilador. Utiliza el operador sizeof(int). Para Turbo C++, probablemente sera 2 bytes (16 bits).

4. Si el tamaño del tipo int de tu compilador es de 2 bytes (16 bits), para reservar bloques de mas de 64 Kb no podras utilizar la funcion malloc. Utiliza en su lugar la funcion calloc, su prototipo es
void *calloc(int num_elementos, int tamano_elemento);
Te reserva espacio para num_elementos, cada uno de tamano_elemento (ademas, todos iniciados a cero). Recuerda que, con el modelo HUGE y si el bloque resultante es de mas de 64 Kb, tamano_elemento debe ser una potencia de 2 (2, 4, 8, 16, etc).

Espero que te sirva de ayuda.

Saludos,

PACO
  Respuesta:  miguel bedolla
intenta con:
unsigned *char memoria=new char[8192] ' Es el equivalente en bits

o intenta esto
typedef *char string;
string *memoria= new string

de esta manera declaras una variable string y no tienes limite de caracteres

    Pregunta:  59018 - BLOAQUEAR TECLAS EN C++
Autor:  Julio Verdugo
Hola que tal,

Como puedo bloquear cualquier tecla en c++? la tecla que yo desee.
Estoy haciendo un programa y quiero que solo esten activadas las teclas de numeros y las de letras no, o al reves que solo se activen las de caracteres y las de numeros no. el punto es que quiero saber como se hace para bloquear cualquier tecla

Gracias
  Respuesta:  Luis Mansilla
Bueno para poder bloquear teclas debes crear un evento que se llama KeyPress... por ejemplo si quieres bloquear teclas de manera que solo te salgan numeros entonces selecciona tu Edit y entra al evento KeyPress y ahi adentro tendras que poner el siguiente codigo:

if (((Key<'0')||(Key>'9'))&&(Key!=8))
{
Key=0;
}

la idea de este codigo es que si entra al if, entonces te bloquea la tecla gracias a la sentencia Key=0;
se leería asi... "SI el codigo ascii de la tecla que aprete esta fuera del codigo ascii de cero o fuera del codigo ascii de nueve (eso quiere decir que no es un numero ) Y tambien cumple que el codigo ascii es diferente de 8 (ascii = 8 es la tecla de borrado o backspace) entonces ignora lo que se presionó"

suerte.
Luis Mansilla

    Pregunta:  59268 - ¿ICONO DEL EJECUTABLDE DE UN PROGRAMA EN C?
Autor:  Victor Alfonso PInedo Martinez
La preguta es esta:

¿ Como hago para crear un icono ejecutable de un programa hecho en C.
Yo utilizo el compilador Borland C++ 3.1 ?

trabako en el sistema operativo Windows.
  Respuesta:  Eliezer Fernandez
No entiendo lo de "icono ejecutable".. hablas de compilar el programa?? osea que el código que tiendes en C genere un archivo ejecutable??

    Pregunta:  59522 - GETS Y PUTS EN VISUAL C
Autor:  javi sanchez
Hola,

me estoy volviendo loco, tengo una cadena de caracteres que quiero coger mediante gets pero no me funciona.

he intentado lo siguiente

1º declararlo como char *nombre
y hacer gets(nombre);

y hay me dice que no he iniciado "nombre", si lo inicio tampoco me deja hacer nada, asi que estoy en las mismas

2º declararlo como char nombre[15]

y hacer gets(nombre);
en ese caso no me lee nada y pasa al siguiente paso

que hago mal??

utilizo el visual c++ 2005
  Respuesta:  Antxon Urrutia
Hola, ¿Antes de hacer el gets recoges algun otro dato? Puede que se te haya quedado algun INTRO en el buffer y por eso se lo salte, prueba a hacer fflush(stdin); antes del gets. Yo utilizo el Dev-C++ y la segunda que forma que dices deveria funcionar, a mi al menos me va con lo siguiente:

#include <stdio.h>
main()
{
char cadena[15];
gets(cadena);
puts(cadena);
getch();
}
Buena suerte!

|<  <<  65 66 67 68 69 70 71 72 73 74 75  >>  >|