Ubuntu 19.04更新后,getchar函数的工作方式有所不同吗?

时间:2019-10-19 18:38:18

标签: nasm ubuntu-19.04

我正在使用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

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

要正确清除流状态,我必须使用cin.clear();从C ++文件中清除流状态,并在Assembly文件中,通过执行以下操作清除流:

extern stdin
extern clearerr

mov rax, 0
mov rdi, [stdin]
call clearerr

这样做可以使我可以在使用call getchar结束输入流之后成功执行CTRL+D来获取用户输入。