I have this code that I am trying to get a message from the user and then display. I am getting segmentation fault right now. I am not sure what is happening. Also when it prompts to get the message it keeps waiting for a second line.
extern printf, scanf    
global _start
section .data
format db '%d',0    
format2 db "%s",10,"%s",10,"%s",10,"%s",10,0
format3 db "%s ",0  
message0:     db "Menu",10,0      
message1:     db "1. Input New Message",10,0        
message2:     db "2. Shift Encrypt",10,0 
message3:     db "3. Display Unencrypted Message",10,0         
message4:     db "4. Quit",10,0 
message5:     db "Enter a number(1-4):",10,0 
section .bss
getMessage: resq 1
choice      resq 1
len:  equ  $ - getMessage
section .text
        global  main
main:   
    
    mov rsi, message0
    call messages
    call menu
    mov rsi, message5
    call messages
    
    call scanChoice
    mov rsi, message1
        call messages
    call scanMessage
    mov rsi, getMessage
        call messages
    ret
; end main
scanChoice:         ;getting the year from user
   mov rdi, format
        mov rsi, choice        
        mov rax, 0      ;no xmm registers 
        call scanf      ;calling c function to get input from user
    ret
scanMessage:                     ;getting the year from user                                                                                                                                                 
   mov rdi, format3
        mov rsi, getMessage
        mov rax, 0              ;no xmm registers                                                                                                                                                           
        call scanf              ;calling c function to get input from user                                                                                                                                  
        ret
    
menu:       ;showing message if is a leap year
    mov rdi,format2 ;first argument                                                                      
        mov rsi,message1  ;second argument                                                                      
        mov rdx, message2 ;third argument                                                                    
        mov rcx, message3    ;fourth argument
        mov r8, message4     ;fifth argument
        mov rax,0
        call printf     ;call the C function                                                                
    ret
messages
    mov rdi,format3
    mov rdx,rsi
    mov rax,0
    call printf
    ret
What is showing:
Menu
- Input New Message 
- Shift Encrypt 
- Display Unencrypted Message 
- Quit 
Enter a number(1-4): 2
- Input New Message hey need to type something again Segmentation fault (core dumped)
 
    