comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Problema con programar en C

  • 8 Respuestas
  • 1579 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Overlord9981

  • *
  • Underc0der
  • Mensajes: 19
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Junio 22, 2016, 12:53:24 pm »
Tengo lo siguiente

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()

{


float fahr;
float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius = "fah";
char temp_fahr = "cels";


min = 0.0;
max = 300.0;
aumento = 20.0;

//temp_fahr = 'fah';
//temp_celsius = 'cels';


fahr = min;
while (fahr <= max);
celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.25c %6.5c/n", temp_fahr, temp_celsius);
printf("%3.25f %6.5f/n", fahr, celsius);
fahr = fahr + aumento;

system("PAUSE");
return 0;
}


Mi pregunta es que problema hay ya que he mirado por todo google la forma de resolver el problema que viene de intentar declarar un char y asignarle una constante, en el código hay dos formas una es declarar char por el nombre de la declaración solo y poner de constante una palabra, otra es lo mismo pero según internet asignar el valor de la constante en la misma declaración (no se si se dice así).
El mensaje del compilador de GCC de la terminal de linux dice:

termometro.c:19:26: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
      char temp_celsius = "fah";
                          ^
termometro.c:20:23: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
      char temp_fahr = "cels";

ya no se donde mirar y gracias.
« Última modificación: Junio 22, 2016, 02:36:28 pm por rollth »
Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Desconectado rollth

  • *
  • Underc0der
  • Mensajes: 874
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #1 en: Junio 22, 2016, 01:30:01 pm »
Los errores son porque estas asignando string a variables char, tu haces esto:

char a = "hola";

Y debería ser así:

char a = 'h';

Desconectado Overlord9981

  • *
  • Underc0der
  • Mensajes: 19
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Junio 22, 2016, 01:36:38 pm »
Entonces tendría que poner

char temp_Fahr[20] = Fahr ?


Al menos eso es lo que me salía en esta página de google

http://recursostic.educacion.es/observatorio/web/es/software/programacion/972-tipos-de-datos
« Última modificación: Junio 22, 2016, 01:39:09 pm por Overlord9981 »
Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Desconectado rollth

  • *
  • Underc0der
  • Mensajes: 874
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #3 en: Junio 22, 2016, 01:47:55 pm »
Entonces tendría que poner

char temp_Fahr[20] = Fahr ?


Al menos eso es lo que me salía en esta página de google

http://recursostic.educacion.es/observatorio/web/es/software/programacion/972-tipos-de-datos

Así es, y Fahr debe ir entre comillas dobles :D

Puedo dar el tema como solucionado, o sigue fallando?

Desconectado Overlord9981

  • *
  • Underc0der
  • Mensajes: 19
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Junio 22, 2016, 01:56:06 pm »

Si cierra el tema y gracias, continuaré probando cosas  ;)


En linux al compilar con gcc con el comando que cito abajo, compila, crea el ejecutable y no salta ningún error.
gcc termometro.c -o termometro
Pero al ejecutarlo con ./termometro no sale nada y se queda en negro como si fuese un bucle infinito pero sin mostrar nada en pantalla.
He probado más ejecutables y no es problema de compilación.
« Última modificación: Junio 22, 2016, 02:10:00 pm por Overlord9981 »
Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Desconectado rollth

  • *
  • Underc0der
  • Mensajes: 874
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
    • Ver Perfil
    • Whateversec
    • Email
  • Twitter: @RoloMijan
« Respuesta #5 en: Junio 22, 2016, 02:30:05 pm »

Si cierra el tema y gracias, continuaré probando cosas  ;)


En linux al compilar con gcc con el comando que cito abajo, compila, crea el ejecutable y no salta ningún error.
gcc termometro.c -o termometro
Pero al ejecutarlo con ./termometro no sale nada y se queda en negro como si fuese un bucle infinito pero sin mostrar nada en pantalla.
He probado más ejecutables y no es problema de compilación.

Te he arreglado un poquito el programa.


Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int      main(){
  5.         float fahr;
  6.         float celsius;
  7.  
  8.         //limites de las tablas superior y u inferior
  9.  
  10.         float min;
  11.         float max;
  12.         float aumento;
  13.  
  14.         //letreros de la tabla
  15.         char temp_celsius[20] = "fah";
  16.         char temp_fahr[20] = "cels";
  17.  
  18.  
  19.         min = 0.0;
  20.         max = 300.0;
  21.         aumento = 20.0;
  22.  
  23.         //temp_fahr = 'fah';
  24.         //temp_celsius = 'cels';
  25.  
  26.  
  27.         fahr = min;
  28.         while (fahr <= max){
  29.         celsius = ((fahr - 32.0) * (5.0/9.0));
  30.         printf("%s                              %s \n", temp_fahr, temp_celsius);
  31.         printf("%3.25f %6.5f \n", fahr, celsius);
  32.         fahr = fahr + aumento;
  33.         }
  34.  
  35.         system("PAUSE");
  36.         return 0;
  37. }

Tenías dos fallos:

1º while(); - Por eso te daba el bucle infinito.

2º printf("%c"); - Intentabas imprimir un string como un caracter.

Si ya está bien y funciona como tú querías avisame que de el post como solucionado.

Desconectado Overlord9981

  • *
  • Underc0der
  • Mensajes: 19
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Junio 22, 2016, 02:31:08 pm »
Me he dado cuenta por lo del bucle en la consola gracias de todas formas es lo que tiene ir aprendiendo.
Ya se puede cerrar el tema
Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Desconectado Overlord9981

  • *
  • Underc0der
  • Mensajes: 19
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #7 en: Junio 22, 2016, 02:42:46 pm »
Ya he acabado ya con  esta parte gracias a todos por su ayuda. Pongo el código por si quiere alguien tenerlo de ejemplo

Código: [Seleccionar]
#include <stdio.h>


int main()

{


float fahr;
float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius[20] = "Cº";
char temp_fahr[20] = "F";


min = 0.0;
max = 300.0;
aumento = 20.0;


printf("%3.25s %25.5s\n", temp_fahr, temp_celsius);

fahr = min;

while (fahr <= max)
{

celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.25f %6.5f\n", fahr, celsius);
fahr = fahr + aumento;

}
return 0;
}


Posdata: Si os fijais arriba en la primera versión si obviais el bucle infinito de while por no poner las llaves el printf [   printf("%3.25s %25.5s\n", temp_fahr, temp_celsius); ]   lo tenía dentro del bucle por lo que se repetía junto a la impresión de los resultados y salía:
F    Cº
0.0000000000000000000000000 -17.77778
  F    Cº
20.0000000000000000000000000 -6.66667
  F    Cº
40.0000000000000000000000000 4.44444
  F    Cº
60.0000000000000000000000000 15.55556
  F    Cº
....

cuando en realidad es así:

 F                       Cº
0.0000000000000000000000000 -17.77778
20.0000000000000000000000000 -6.66667
40.0000000000000000000000000 4.44444
60.0000000000000000000000000 15.55556
80.0000000000000000000000000 26.66667
...


Además de que he modificado los puntos de desplazamiento para hacer coincidir o intentarlo poner Cº encima de sus correspondientes cálculos.


Posdata final ya: No hay forma de limitar los ceros para que no salgan tantos


Gracias a todos.

Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Desconectado BlackBlex

  • *
  • Underc0der
  • Mensajes: 49
  • Actividad:
    0%
  • Reputación 4
    • Ver Perfil
  • Skype: blackblex
  • Twitter: blackblex
« Respuesta #8 en: Junio 24, 2016, 01:15:59 pm »


Ya he acabado ya con  esta parte gracias a todos por su ayuda. Pongo el código por si quiere alguien tenerlo de ejemplo

Código: [Seleccionar]
#include <stdio.h>


int main()

{


float fahr;
float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius[20] = "Cº";
char temp_fahr[20] = "F";


min = 0.0;
max = 300.0;
aumento = 20.0;


printf("%3.25s %25.5s\n", temp_fahr, temp_celsius);

fahr = min;

while (fahr <= max)
{

celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.25f %6.5f\n", fahr, celsius);
fahr = fahr + aumento;

}
return 0;
}


Posdata: Si os fijais arriba en la primera versión si obviais el bucle infinito de while por no poner las llaves el printf [   printf("%3.25s %25.5s\n", temp_fahr, temp_celsius); ]   lo tenía dentro del bucle por lo que se repetía junto a la impresión de los resultados y salía:
F    Cº
0.0000000000000000000000000 -17.77778
  F    Cº
20.0000000000000000000000000 -6.66667
  F    Cº
40.0000000000000000000000000 4.44444
  F    Cº
60.0000000000000000000000000 15.55556
  F    Cº
....

cuando en realidad es así:

 F                       Cº
0.0000000000000000000000000 -17.77778
20.0000000000000000000000000 -6.66667
40.0000000000000000000000000 4.44444
60.0000000000000000000000000 15.55556
80.0000000000000000000000000 26.66667
...


Además de que he modificado los puntos de desplazamiento para hacer coincidir o intentarlo poner Cº encima de sus correspondientes cálculos.


Posdata final ya: No hay forma de limitar los ceros para que no salgan tantos


Gracias a todos.

Los ceros los controlas con el .25 que tienes en el printf.

Código: [Seleccionar]
#include <stdio.h>

int main()
{
  float fahr;
  float celsius;

//limites de las tablas superior y u inferior

float min;
float max;
float aumento;

//letreros de la tabla
char temp_celsius[5] = "Cº";
char temp_fahr[5] = "F";
   
min = 0.0;
max = 300.0;
aumento = 20.0;

printf(" %s\t\t  %s\n", temp_fahr, temp_celsius);

fahr = min;

while (fahr <= max)
{
celsius = ((fahr - 32.0) * (5.0/9.0));
printf("%3.2f\t\t%6.2f\n", fahr, celsius);
fahr = fahr + aumento;
}
return 0;
}

Enviado desde mi Lenovo A7600-F mediante Tapatalk


 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 8398
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2298
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1716
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 3200
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 3569
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon