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