[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.html>


Más información sobre la lista de distribución Cconclase