gpt4 book ai didi

c - Escaping "white space"在C中转义

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:07 24 4
gpt4 key购买 nike

我真的很确定如何解释这个问题,但我会试一试。

我的程序中有这行代码:

scanf("%c", &character);

注意 %c 之前的空格。这应该可以防止 scanf 将最后一个 ENTER 键解释为一个字符。这行得通,但是在这一行及其产生的 printf 输出之后,程序将不会继续执行,直到我提供另一个字符然后按 ENTER 键。之后它忽略所有 scanf 并在没有任何用户输入的情况下打印所有 printf 输出。那有意义吗。我是 C 的新手,所以我确信我遗漏了一些简单的东西,但我找不到任何解决方案。

谢谢!

最佳答案

标准输入被缓冲。

在刷新缓冲区(标准输入)之前,您的代码将看不到缓冲区。
当缓冲区变满或插入“\n”(回车键)时会发生这种情况。

因为 scanf() 是一个阻塞 I/O 调用。应用程序将等待输入(无限期)。从而使代码看起来像是停滞了。

恕我直言

您不应该尝试解释代码前面部分发生的事情。这会将您的代码耦合到您可能无法控制的其他输入。您的输入应该阅读它需要的所有内容,不要再多了。

例如:如果您要求用户输入一个字符,然后按回车键。您应该删除字符,然后从输入流中输入。您不应期望流的下一个用户为您整理(或补偿您的代码)。

printf("Enter (Y/N)\n");
scanf("%c", &character);
scanf("%*[^\n]"); // Ignore everything to the end of line.
// Assuming you have told the user you will ignore
// extraneous characters. The next input should now
// expect only what they need.

关于c - Escaping "white space"在C中转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com