汇编程序问题:'Enter Filename'与'Enter String'提示重叠无等待输入
x86-64汇编程序输入提示异常问题解决
问题根源
你遇到的两个提示同时输出的问题,本质是两个常见原因导致:
- 标准输出缓冲区未及时刷新:如果输出的提示没有触发缓冲区刷新,后续提示会被暂存,直到触发条件满足才一次性输出。
- 输入缓冲区残留换行符:用户选择选项后按下的回车(
\n)会留在输入缓冲区,后续读取文件名的操作会直接读取这个换行,跳过用户输入步骤,直接进入下一个提示。
具体解决方法
1. 确保输出提示触发缓冲区刷新
Linux下stdout默认是行缓冲模式,只要输出的提示字符串以换行符结尾,就能自动触发缓冲区刷新。修改你的提示字符串:
; 原提示字符串 ; filename_prompt db 'Enter filename: ', 0 ; 修改为添加换行符 filename_prompt db 'Enter filename: ', 0xA, 0
输出时对应调整字符串长度(比如原长度15,现在是16)。如果不想添加换行,也可以手动调用libc的fflush函数刷新stdout:
extern fflush extern stdout ; 在输出"Enter filename:"后调用fflush mov rdi, [stdout] call fflush
2. 清空输入缓冲区残留的换行
在读取用户选择的选项(1或2)后,添加循环读取输入直到遇到换行符,清空缓冲区:
; 定义一个临时字节缓冲区 temp_byte db 0 ; 读取完选项后执行以下代码清空缓冲区 clear_input_buffer: mov rax, 0 ; read系统调用号 mov rdi, 0 ; 标准输入(stdin) mov rsi, temp_byte mov rdx, 1 ; 每次读取1字节 syscall cmp byte [temp_byte], 0xA ; 判断是否是换行符 jne clear_input_buffer ; 不是则继续读取
把这两处修改应用到你的代码中,就能解决提示同时输出的问题。
内容的提问来源于stack exchange,提问作者Lệ Minh Hoàng
相关产品推荐
相关产品推荐

