1
void deleteFile( FAT *allotable ) {
/* PRECONDITION: This function expects a FAT structure that is valid.
 * POSTCONDITION: A file is flagged as removed from the disk and it will 
 * be possible to write over it
 */

    // Local variables
    unsigned char test[9] = { 0 };

    // Select file to remove
    // TODO: The user will select the file to remove based on the 
    // listing in listDir
    // For testing, we are removing file at location 0 in the entry
    fgets( test, NAME_SIZE, stdin );
    return;
}

当我运行该函数并输入一个字符串时,我看到该字符串打印回标准输出中。我确定我的缓冲区有问题,但我似乎无法解决这个问题。

4

3 回答 3

1

当你运行它时,如果你看到:

./program
input<CR>
input
<prompt>

那么您提供的代码不负责这样做。使用一些调试语句或调试器来确定回声的来源,因为这不是 fgets 所做的。

如果您看到:

./program
input<CR>
<prompt>

这就是终端的工作方式。除非您禁用该功能(对于输入密码很有用),否则它们会在您键入时回显文本。

于 2012-11-20T20:50:16.693 回答
0

当您在控制台中键入字符时,它们会回显给您。当您从 读取时,字符仍将被读取stdin

或者,您可以将程序的输出通过管道传输到您自己的,或将文件重定向到标准输入。在这两种情况下,字符不会被回显:

echo Program output | ./myprog

或者:

./myprog < fileinput.txt

编辑- 听起来这是一个终端问题。

您还没有说明您正在使用什么系统或如何与它交互,但我可以通过使用 PuTTY 的 SSH 连接到系统来获得这种行为。

我将终端设置更改为强制“本地回声”和“本地行编辑”。然后,每当我按下回车键时,我都会回显该行。显然,只有其中一个应该打开。最好是“本地回声”。

于 2012-11-20T20:48:46.323 回答
0

造成这种情况的一个常见原因是在您的终端(现在可能是模拟器)和 OS 终端驱动程序中都启用了回显。假设您使用的是 Unix,如果您这样做,问题是否会消失:

stty -echo

在运行你的程序之前?

于 2012-11-20T21:04:29.520 回答