我正在使用Assembly和c ++编写程序来收集用户输入的数据。在我的c ++文件中,我使用cin
循环读取用户号码:
while (cin >> input)
{
myArray.push_back(input);
}
cin.clear();
还要求用户输入CTRL-D
。在链接的Assembly文件中,我询问用户Are these numbers correct (y/n)?
以前,在更新到Ubuntu 19.04之前,我将在读完输入后如上所述执行cin.clear()
,因此当我在Assembly文件中执行call getchar
时,实际上可以从用户那里接收输入。但是,在更新Ubuntu之后,我的程序仅输出数字是否正确并且无法读入’y/n‘
的问题。
我在cin循环之后也尝试过cin.ignore()
,但这似乎无法解决我的问题。我只能假定我的Assembly文件中的call getchar
正在读取换行符,而不是接受用户输入,但是无论我在网上找到的修复程序,似乎都没有接受。
为进一步说明,我正在终端中与g ++进行编译/链接,并与nasm进行组装。如果需要,我可以提供更多代码。在汇编中,我只是在做:
mov rax, 0
mov rdi, correctnumbersprompt ;This holds the string asking y/n
call printf
call getchar
答案 0 :(得分:0)
我找到了解决方法。
要正确清除流状态,我必须使用cin.clear();
从C ++文件中清除流状态,并在Assembly文件中,通过执行以下操作清除流:
extern stdin
extern clearerr
mov rax, 0
mov rdi, [stdin]
call clearerr
这样做可以使我可以在使用call getchar
结束输入流之后成功执行CTRL+D
来获取用户输入。