Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
warnings: conversion may lose significant digits
Autor Mensaje
facus49 Sin conexión
Empleado del buffet
.........
*

Ing. Electrónica
Facultad Regional Córdoba

Mensajes: 2
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Oct 2012
Facebook
Mensaje: #1
warnings: conversion may lose significant digits Dudas y recomendaciones Informática I (Electrónica)
hola como andan.. soy nuevo en la comunidad soy de frc... queria ver si alguno me puede sacar la duda, tengo este programita en c que es como un formulario donde completas los datos y te salen en forma de tabla, anda perfecto, pero cuando lo compilo me salen 2 warnings queria saber cual es su origen, les dejo el codigo !..ah y tmb acepto criticas al codigo para mejorarlo gracias!

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 4

struct Student {
long Num_Leg;
char Nom_y_Apell [25];
long Num_Doc;
char Carrera;
long Ano;
char Dni[20];
char Carr[25];
}Alum [SIZE];

void Puntos (long, int);
void Mayusculas (char [], int );
void Carreras (int);

int main() {

int aux1;

for ( aux1 = 0; aux1 < SIZE; aux1 ++)
{
textcolor(GREEN);
gotoxy(20,2), cprintf("***ALUMNO N%d***", (aux1+1));
gotoxy(23,3), cprintf("=========");

textcolor(WHITE);
gotoxy(5,8), cprintf("*Introduzca su numero de legajo: ");
gotoxy(5,10), cprintf("*Introduzca su nombre y apellido: ");
gotoxy(5,12), cprintf("*Introduzca su numero de documento: ");
gotoxy(5,14), cprintf("*Introduzca el codigo de la carrera que esta cursando: ");
gotoxy(5,16), cprintf("*Introduzca el ano: ");

gotoxy(38,8), scanf("%d", &Alum[aux1].Num_Leg);
fflush(stdin);

gotoxy(39,10), scanf("%[^\n]s", &Alum[aux1].Nom_y_Apell);
Mayusculas(Alum[aux1].Nom_y_Apell, aux1);
fflush(stdin);

gotoxy(41,12), scanf("%d", &Alum[aux1].Num_Doc);
Puntos(Alum[aux1].Num_Doc, aux1);
fflush(stdin);

gotoxy(60,14), scanf("%c", &Alum[aux1].Carrera);
Carreras(aux1);
fflush(stdin);

gotoxy(25,16), scanf("%d", &Alum[aux1].Ano);
fflush(stdin);

clrscr();
}

printf("%10s%8s%20s%14s%18s%9s\n", " ","Legajo","Nombre y Apellido", "Documento", "Carrera", "Ingreso" );

for( aux1 = 0 ; aux1 < SIZE ; aux1++)
{
printf("%s%2d%10d%20s%14s%18s%9d\n", "Alumno",(aux1+1), Alum[aux1].Num_Leg ,Alum[aux1].Nom_y_Apell, Alum[aux1].Dni, Alum[aux1].Carr,Alum[aux1].Ano);
}
getch();

return 0;
}

void Puntos (long Num_Doc, int aux1)
{

int k,i;
int cont1 = 1, cont2;
char DNI[20] = "";

k = sprintf(DNI, "%ld", Num_Doc);
cont2 = (k/3);

for (i = (k-1); i >= 0; i-- )
{
if( cont1 != 3)
{
DNI[i+cont2] = DNI[i];
cont1++;
}

else if (cont1 == 3)
{
cont1=0;
DNI[i+cont2]=DNI[i];
cont2--;
DNI[i+cont2] = '.';
cont1++;
}
}

if (k %3 == 0)
DNI[0] =' ';


strcpy( Alum[aux1].Dni, DNI);

return;
}

void Mayusculas (char Nombre[25], int aux1)
{
char *s = Nombre;

for ( ; *s != '\0' ; s++ )
{
if ( islower(Nombre[0]) != 0 )
{
Nombre[0] -= 32;
}

if ( *s == ' ')
{
s++;
if (islower(*s) != 0)
*s -= 32;
}
}

strcpy(Alum[aux1].Nom_y_Apell, Nombre);

return;
}

void Carreras(int aux1)
{

char *carr[8] = { "Ing. Electrica",
"Ing. Civil",
"Ing. Metalurgica",
"Ing. Industrial",
"Ing. Quimica",
"Ing. Electronica",
"Ing. En Sistemas",
"Ing. Mecanica",
};// Las carreras tienen un codigo que va ascendete desde la f hasta la m, por ende a la primer carrera le corresponde la f como asi a la ultima m

strcpy( Alum[aux1].Carr, carr[ (Alum[aux1].Carrera -'f') ]);

return;
}

" It's better to burn out than to fade away..."

[Imagen: 9659C340D.gif]
19-10-2012 12:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 posts
Registro en: May 2008
Mensaje: #2
RE: warnings: conversion may lose significant digits

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 4

struct Student {
long Num_Leg;
char Nom_y_Apell [25];
long Num_Doc;
char Carrera;
long Ano;
char Dni[20];
char Carr[25];
}Alum [SIZE];

void Puntos (long, int);
void Mayusculas (char [], int );
void Carreras (int);

int main() {

int aux1;

for ( aux1 = 0; aux1 < SIZE; aux1 ++)
{
textcolor(GREEN);
gotoxy(20,2), cprintf("***ALUMNO N%d***", (aux1+1));
gotoxy(23,3), cprintf("=========");

textcolor(WHITE);
gotoxy(5,8), cprintf("*Introduzca su numero de legajo: ");
gotoxy(5,10), cprintf("*Introduzca su nombre y apellido: ");
gotoxy(5,12), cprintf("*Introduzca su numero de documento: ");
gotoxy(5,14), cprintf("*Introduzca el codigo de la carrera que esta cursando: ");
gotoxy(5,16), cprintf("*Introduzca el ano: ");

gotoxy(38,8), scanf("%d", &Alum[aux1].Num_Leg);
fflush(stdin);

gotoxy(39,10), scanf("%[^\n]s", &Alum[aux1].Nom_y_Apell);
Mayusculas(Alum[aux1].Nom_y_Apell, aux1);
fflush(stdin);

gotoxy(41,12), scanf("%d", &Alum[aux1].Num_Doc);
Puntos(Alum[aux1].Num_Doc, aux1);
fflush(stdin);

gotoxy(60,14), scanf("%c", &Alum[aux1].Carrera);
Carreras(aux1);
fflush(stdin);

gotoxy(25,16), scanf("%d", &Alum[aux1].Ano);
fflush(stdin);

clrscr();
}

printf("%10s%8s%20s%14s%18s%9s\n", " ","Legajo","Nombre y Apellido", "Documento", "Carrera", "Ingreso" );

for( aux1 = 0 ; aux1 < SIZE ; aux1++)
{
printf("%s%2d%10d%20s%14s%18s%9d\n", "Alumno",(aux1+1), Alum[aux1].Num_Leg ,Alum[aux1].Nom_y_Apell, Alum[aux1].Dni, Alum[aux1].Carr,Alum[aux1].Ano);
}
getch();

return 0;
}

void Puntos (long Num_Doc, int aux1)
{

int k,i;
int cont1 = 1, cont2;
char DNI[20] = "";

k = sprintf(DNI, "%ld", Num_Doc);
cont2 = (k/3);

for (i = (k-1); i >= 0; i-- )
{
if( cont1 != 3)
{
DNI[i+cont2] = DNI[i];
cont1++;
}

else if (cont1 == 3)
{
cont1=0;
DNI[i+cont2]=DNI[i];
cont2--;
DNI[i+cont2] = '.';
cont1++;
}
}

if (k %3 == 0)
DNI[0] =' ';


strcpy( Alum[aux1].Dni, DNI);

return;
}

void Mayusculas (char Nombre[25], int aux1)
{
char *s = Nombre;

for ( ; *s != '\0' ; s++ )
{
if ( islower(Nombre[0]) != 0 )
{
Nombre[0] -= 32;
}

if ( *s == ' ')
{
s++;
if (islower(*s) != 0)
*s -= (char) 32;
}
}

strcpy(Alum[aux1].Nom_y_Apell, Nombre);

return;
}

void Carreras(int aux1)
{

char *carr[8] = { "Ing. Electrica",
"Ing. Civil",
"Ing. Metalurgica",
"Ing. Industrial",
"Ing. Quimica",
"Ing. Electronica",
"Ing. En Sistemas",
"Ing. Mecanica",
};// Las carreras tienen un codigo que va ascendete desde la f hasta la m, por ende a la primer carrera le corresponde la f como asi a la ultima m

strcpy( Alum[aux1].Carr, carr[ (Alum[aux1].Carrera -'f') ]);

return;
}


Podes dejar lso warnings asi vemos en que linea es?
(Este mensaje fue modificado por última vez en: 19-10-2012 13:05 por brunodiaz.)
19-10-2012 12:58
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
facus49 Sin conexión
Empleado del buffet
.........
*

Ing. Electrónica
Facultad Regional Córdoba

Mensajes: 2
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Oct 2012
Facebook
Mensaje: #3
RE: warnings: conversion may lose significant digits
122 y 115 esas son las lineas, los warnings me los marca en los punteros *s-=32;
(Este mensaje fue modificado por última vez en: 19-10-2012 13:05 por facus49.)
19-10-2012 13:01
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo.m Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 141
Agradecimientos dados: 13
Agradecimientos: 47 en 23 posts
Registro en: Apr 2011
Mensaje: #4
RE: warnings: conversion may lose significant digits
Creo que el warning se debe a que estás asignando un int en una variable tipo char. En C por defecto todas las expresiones son int a menos que no entren en ese tipo de datos. Ahí a un char le estás restando un int, o sea que el resultado es un int. En principio ese warning no te debería traer problema porque no vas a superar la capacidad de un char, pero si querés que no te lo muestre, directamente escribí Nombre[0] -= ' '; o bien Nombre[0] -= (char) 32; como hiciste más abajo.
19-10-2012 16:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)