[C con Clase] Problema escribir en miembro de una estructura
Davidson, Steven
srd4121 en njit.edu
Sab Mayo 18 05:10:19 CEST 2013
Hola César,
2013/5/17 César Arias <sinatra435 en hotmail.com>
>
> Hola nuevamente, tengo un pequeño problema con un miembro de una
> estructura en un pequeño programilla. El programa es el siguiente:****
>
> ____________________________________________________________________****
> //aritmetica basica: sumar, restar, multiplicar y divider numeros
> reacionales
> #include"stdio.h"
>
Deberías usar <> en lugar de las comillas, ya que se trata de un fichero
estándar de cabecera. Por otro lado, estás usando C++, así debería ser
<cstdio>. Por último, aconsejo usar <iostream> y los objetos 'cout' y
'cin', ya que son más cómodos de usar y más seguros, que es justo el caso
que tienes.
typedef struct{
> short num; //numerador
> short den; //denominador
> }RACIONAL;****
>
>
>
Nuevamente, en C++, no es necesario usar 'typedef' para este caso. Basta
con escribir el nombre de la estructura para usarla como tipo de dato; a
diferencia que en C.
void reduc(RACIONAL &num);
> void fsuma( RACIONAL &sum1, RACIONAL &sum2, RACIONAL &suma);****
>
> int main(){
> RACIONAL r1, r2, suma;
> printf("r1\nnumerador: "); scanf("%d", &r1.num);
> printf("denominador: "); scanf("%d", &r1.den);
> printf("\nr2\nnumerador: "); scanf("%d", &r2.num);
> printf("denominador: "); scanf("%d", &r2.den);
>
>
El error que tienes se debe a que usas el especificador %d de 'scanf()' que
es incorrecto para indicar que el tipo es de tipo 'short int'. Deberías
usar %hd; por ejemplo,
scanf( "%hd", &r1.num );
De lo contrario, 'scanf()' interpretará la dirección de memoria que pasas
como si se tratase de un 'int', que seguramente ocupará 4 bytes, en lugar
de un 'short int', que seguramente ocupará 2 bytes. Por esta razón,
'scanf()' sobrescribía los datos de otra variable al rebasar la memoria
cuando escribía en una variable.
Como he mencionado anteriormente, sugiero usar 'cout <<' y 'cin >>'; esto
sería,
cout << "r1\nnumerador: ";
cin >> r1.num;
cout << "denominador: ";
cin >> r1.den;
...
'cin >>' ya toma en cuenta el tipo verdadero de la variable; no hay que
andar indicando cuál es. Lo mismo sucede con 'cout <<'.
Espero que esto te ayude.
Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130517/be9b3e5b/attachment-0001.html>
Más información sobre la lista de distribución Cconclase