После второго ввода в scanf всё смешивается

Всем привет. У меня есть такой код:

    .386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\msvcrt.inc
include \masm32\include\user32.inc
include \masm32\macros\macros.asm

includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\msvcrt.lib

.data?
    username    db ?
    surname     db ?
    middleName  db ?
    birthday    db ?

.data


    format  db "%s", 0
    mes     db "Name: ", 0
    mes2    db "Surname: ", 0
    mes3    db "Middle name: ", 0
    mes4    db "Date of birth: (dd.mm.yy): ", 0

    mesSuc db "Name: %s", 13,
                "Surname: %s", 13,
                "Middle name: %s", 13,
                "Birthday: %s", 13, 0

.code
    start:
        invoke crt_printf, ADDR mes
        invoke crt_scanf, ADDR format, ADDR username

        invoke crt_printf, ADDR mes2
        invoke crt_scanf, ADDR format, ADDR surname

        invoke crt_printf, ADDR mes3
        invoke crt_scanf, ADDR middleName

        invoke crt_printf, ADDR mes4
        invoke crt_scanf, ADDR birthday

        invoke crt_printf, ADDR mesSuc

        invoke crt__getch

        invoke crt_exit, 0
        ret
    end start

Появилась проблема при втором вводе: Например, я ввожу:

Name: Andrey
Surname: Petichkin
; и тут когда нажимаю ENTER появляется вот такая белеберда:
Middle name: Date of birth: (dd.mm.yy): Name: P (Zv 4Zv^иt ш
Middle name: Л UЛьVЛЄЕ╔u Л╬ ИZv ╓P (Zv 4Zv^иt   ш
Birthday: ь 

Помню писал на Си\С++, была такая же штука, но там можно было исправить с помощью других функций, например getline(cin, str); или scanf_s, а тут я даже хз...


Ответы (1 шт):

Автор решения: SharpPythoneist

Извиняюсь, после того как просмотрел свой же вопрос, заметил ошибку в том, что после второго я не передавал аргумент format остальным scanf. Рабочий код:

    .386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\msvcrt.inc
include \masm32\include\user32.inc
include \masm32\macros\macros.asm

includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\msvcrt.lib

.data?
    username    db ?
    surname     db ?
    middleName  db ?
    birthday    db ?

.data


    format  db "%s", 0
    mes     db "Name: ", 0
    mes2    db "Surname: ", 0
    mes3    db "Middle name: ", 0
    mes4    db "Date of birth: (dd.mm.yy): ", 0

    mesSuc db "Name: %s", 13,
                "Surname: %s", 13,
                "Middle name: %s", 13,
                "Birthday: %s", 13, 0

.code
    start:
        invoke crt_printf, ADDR mes
        invoke crt_scanf, ADDR format, ADDR username

        invoke crt_printf, ADDR mes2
        invoke crt_scanf, ADDR format, ADDR surname

        invoke crt_printf, ADDR mes3
        invoke crt_scanf, ADDR format,  ADDR middleName

        invoke crt_printf, ADDR mes4
        invoke crt_scanf, ADDR format, ADDR birthday

        invoke crt_printf, ADDR format, ADDR mesSuc

        invoke crt__getch

        invoke crt_exit, 0
        ret
    end start
→ Ссылка