Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Naimaderis en 11 Diciembre 2016, 20:07 pm



Título: El programa deja de funcionar
Publicado por: Naimaderis en 11 Diciembre 2016, 20:07 pm
Estaba tratando de hacer una calculadora sencilla, pero por alguna razon el programa deja de funciones.
¿Alguien tiene alguna idea de porque?

(http://i.imgur.com/834nnSh.png)

MOD:Imagen adaptada a lo permitido


Título: Re: El programa deja de funcionar
Publicado por: ivancea96 en 11 Diciembre 2016, 20:12 pm
Código
  1. scanf("%d", cantidadnumerossumar);
Los argumentos de scanf son direcciones de memoria donde vas a almacenar los datos.

Por tanto, para pasarle las direcciones, usa el operador "&":
Código
  1. scanf("%d", &cantidadnumerossumar);

El error es que interpretaba los datos que tenía el int cantidadnumerossimar como si fuera una dirección, y trató de escribir en ella, lo que generó el error.


Título: Re: El programa deja de funcionar
Publicado por: Naimaderis en 11 Diciembre 2016, 20:15 pm
Muchas gracias!!!!, sabia sobre eso, pero no me di cuenta que era ese el error.


Título: Re: El programa deja de funcionar
Publicado por: engel lex en 11 Diciembre 2016, 20:50 pm
no se que compilador usas... pero te está dejando pasar muchos errores, las funciones no tienen tipo (main debe ser siempre int), sumar creo que debería ser void según lo que quieras hacer... te está permitiendo compilar sin prototipos y llamar a la función...


Título: Re: El programa deja de funcionar
Publicado por: Naimaderis en 12 Diciembre 2016, 05:08 am
Utilizo code::blocks. Ahora que lo dices, el programa compila de maravilla, en el libro que estoy usando, aun no he llegado a la parte de tipos de funciones. Pero he visto que ponen main(void) o cosas asi.
En php, siempre ponia funcion(y aca adentro los parametros), estoy ansioso de ver como funciona aca.
(http://i.imgur.com/ca463Cz.png)

MOD:Imagen adaptada a lo permitido (Por 2da vez)


Título: Re: El programa deja de funcionar
Publicado por: engel lex en 12 Diciembre 2016, 05:26 am
por que empiezas contador en 1 en la linea 24? al igual que ahí con ese +1 se te va a desbordar la variable

al igual que no entiendo abajo la razón del operador ternario (y no se si entiendes como funciona, porque a mucha gente se le complica)  y tambien un j empezando en


Citar
no se que compilador usas...
Citar
Utilizo code::blocks.

code::blocks es el ide, no el compilador... a mi ni por accidente me deja compilar eso XD



Título: Re: El programa deja de funcionar
Publicado por: ivancea96 en 12 Diciembre 2016, 11:09 am
por que empiezas contador en 1 en la linea 24? al igual que ahí con ese +1 se te va a desbordar la variable

al igual que no entiendo abajo la razón del operador ternario (y no se si entiendes como funciona, porque a mucha gente se le complica)  y tambien un j empezando en


code::blocks es el ide, no el compilador... a mi ni por accidente me deja compilar eso XD



Este hermoso código compila en algunos compiladores de C (ahora estoy usando GCC):
Código
  1. main(){
  2. func(5);
  3. }
  4.  
  5. func(n){
  6. printf("%i", n);
  7. }

Se toma el uso de las funciones como una "declaracióm implícita".
Eso sí, a la hora de linkear, tira error si no encuentra las funciones.

Pero como dice engel, Naimaderis, las funciones tienen un retorno siempre (el del main es int), y antes de usar una función, el compilador debe conocerla:

Código
  1. #include <stdio.h>
  2.  
  3. void func(int);
  4.  
  5. int main(){
  6. func(5);
  7. }
  8.  
  9. void func(int n){
  10. printf("%i", n);
  11. }
O
Código
  1. #include <stdio.h>
  2.  
  3. void func(int n){
  4. printf("%i", n);
  5. }
  6.  
  7. int main(){
  8. func(5);
  9. }


Título: Re: El programa deja de funcionar
Publicado por: Naimaderis en 12 Diciembre 2016, 22:46 pm
Ivan, estuve viendo tu blog, cuando avance un poco mas, creo que me va a servir bastante

por que empiezas contador en 1 en la linea 24? al igual que ahí con ese +1 se te va a desbordar la variable

No entiendo muy bien el concepto de variable desbordada, me suena a que se pasa de la capacidad, ¿Podrias explicarlo? Gracias

Podria cambiar la linea 24, pero entonces tengo que cambiar la linea 33 y 36. No se si sera mejor asi entonces:

Código
  1.    for (contador = 0; contador < cantidadnumerossumar; contador ++ )
  2.  
  3.    for (j = 0; j < cantidadnumerossumar; j++ ) {
  4.  
  5.            (j < cantidadnumerossumar - 1) ? printf("%d + ",numerosasumar[j]) : printf(" %d = %d",numerosasumar[j], total);
  6.  
  7.  

Igualmente, estoy agregando un -1 abajo

al igual que no entiendo abajo la razón del operador ternario (y no se si entiendes como funciona, porque a mucha gente se le complica)  y tambien un j empezando en

Segun tengo entendido es como un if con else, no?. Me refiero:

Condicion ? Si se cumple pasa esto : Si no, pasa esto



code::blocks es el ide, no el compilador... a mi ni por accidente me deja compilar eso XD


Perdon, utilizo gnu gcc compiler. Espero adaptar bien la imagen esta vez:

(http://i.imgur.com/nh2qQPG.png)



Título: Re: El programa deja de funcionar
Publicado por: engel lex en 12 Diciembre 2016, 23:04 pm
los vectores empiezan en 0 siempre


si declaran por ejemplo int a[4]

Código:
a
|_|_|_|_|
 0 1 2 3

a[1]
|_|X|_|_|
 0 1 2 3

a[4]
|_|_|_|_|???
 0 1 2 3

si haces a[4] el intentará acceder a la memoria ram en posición a + 4*size(int) y normalmente retorna "segment fault"

y si el operador ternario lo comprendes bien...


Título: Re: El programa deja de funcionar
Publicado por: Naimaderis en 17 Diciembre 2016, 01:10 am
no se que compilador usas... pero te está dejando pasar muchos errores, las funciones no tienen tipo (main debe ser siempre int), sumar creo que debería ser void según lo que quieras hacer... te está permitiendo compilar sin prototipos y llamar a la función...
Ya llegue al capitulo de funciones y prototipo, y me encontre con algo interesante:
(http://i.imgur.com/FMUGj5L.png)
¿A esto te referias? ¿Deberia actualizar el compilador? Es raro que sea vieja, lo descargue hace poco

MOD:Imagen adaptada a lo permitido (Por 3ra vez). Lee las reglas. El tamaño máximo es de 800x600.