C语言 为什么每次迭代打印两次消息


            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",然后按回车键。循环打印错误消息,然后再次循环。但是,这次缓冲区中仍然有一个换行符,并且在读取时不会再次要求输入。然后在第三次缓冲区耗尽并再次读取块,等待更多输入。

最新更新