char yes_no = 'z';
int i = 0;
while ( ( yes_no != 'y' ) && ( yes_no != 'n') )
{
read( 0, &yes_no, 1 );
printf("%dA file already exists at your write location. Over write? (y/n)n", i++);
}
输出如下所示:
0A file already exists at your write location. Overwrite? (y/n)
1A file already exists at your write location. Overwrite? (y/n)
a
2A file already exists at your write location. Overwrite? (y/n)
3A file already exists at your write location. Overwrite? (y/n)
。等。
为什么它会遍历循环两次,而不是每次都等待用户输入?
当您输入一个字母并按回车键时,它会'an'
放入流中。 通过读取 1 个字节,您仍然会在流中留下'n'
,因此下次您调用 read()
时,它会读取'n'
而不是阻塞和等待用户输入。您需要丢弃流中剩余的'n'
。
可能是因为如果您输入 ,,y'' 并按 Enter 键,您将字符串"y"放入缓冲区中 - 这是两个字符,您的程序尝试读取它们。
你应该向我们展示更多的代码。(当您打印a
时?我猜你也输入换行符,所以你回到循环的开头。
这是一种预感,但因为你输入的数据是"a"而不仅仅是"a"。所以在第一个循环中读取块,因为没有数据。输入"a",然后按回车键。循环打印错误消息,然后再次循环。但是,这次缓冲区中仍然有一个换行符,并且在读取时不会再次要求输入。然后在第三次缓冲区耗尽并再次读取块,等待更多输入。