falla de segmentación usando scanf con entero

2 minutos de lectura

avatar de usuario
brostone51

Recibo una falla de segmentación en mi código C cuando intento leer la entrada de números enteros del usuario con la siguiente función:

int userChoice = 0, tS;
float tR, tW, tP, aP;
char title[35], title2[35];
Book *curr;
while (userChoice != 9) {
    printf("1. Determine and print total revenue\n");
    printf("2. Determine and print total wholesale cost\n");
    printf("3. Determine and print total profit\n");
    printf("4. Determine and print total number of sales\n");
    printf("5. Determine and print average profit per sale\n");
    printf("6. Print book list\n");
    printf("7. Add book\n");
    printf("8. Delete book\n");
    printf("9. Exit the program\n");
    scanf("%d", userChoice);
    ...
    ...

Cada vez que ejecuto mi programa, me permite ingresar el número que se asignará a userChoice, pero seg falla inmediatamente después. ¿Alguna ayuda? ¡Gracias!

Editar: el error exacto que recibo i:

Program received signal SIGSEFV, Segmentaion fault. 
0x0000003503256f50 in _IO_vfscanf_internal () from /lib64/libc.so.6

  • Considere: ¿necesita 8 casos para causar el bloqueo, o solo uno lo haría? Si uno fuera suficiente, ¿por qué nos mostrarías ocho? ¿Es necesaria una declaración de caso, o podría hacerlo el código de línea recta? Puede ser instructivo leer “Cómo crear un ejemplo mínimo, completo y verificable” para sus preguntas en el futuro. No solo es un buen protocolo para hacer una pregunta, sino que también es una buena metodología de depuración que puede ayudarlo a resolver sus propios problemas sin ayuda externa.

    – HostileFork dice que no confíes en SE

    8 de octubre de 2014 a las 0:26


  • Debe haber miles de duplicados de este

    –MM

    8 de octubre de 2014 a las 1:21

Debiera ser:

scanf("%d", &userChoice);

Necesita el ampersand para leerlo en la ubicación de userChoice, y no en el valor de userChoice.

  • @ brostone51 o el compilador que está utilizando no tiene las advertencias bien habilitadas o está utilizando un compilador antiguo. Sugiera arreglar que muchos programadores se pierdan cosas como esta, pero el compilador se da cuenta. Te ahorra tiempo.

    – chux – Reincorporar a Monica

    08/10/2014 a las 21:25

scanf("%d", userChoice);

=〉

scanf("%d", &userChoice);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad