После второго ввода в 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