gpt4 book ai didi

c - C 如何处理 scanf 中的尾随空格?

转载 作者:行者123 更新时间:2023-11-30 20:08:56 25 4
gpt4 key购买 nike

如果 scanf 语句的格式字符串中有空格,如下所示,

scanf(" %c",&abc);

然后它会跳过无限数量的空白,直到遇到一个字符。
因此 \n p 作为输入会将 p 存储在 abc 中。

使用这个概念,我无法预测我输入的以下程序的输出。

char echo ;
do {
scanf ("%c ", &echo);
printf ("%c\n",echo);
} while (echo != '\n') ;

请注意,scanf 语句中有一个尾随空格

执行代码后,我得到以下行为。
它要求一个角色。 我输入C
它要求一个角色。 我输入我
它打印 C。
它要求一个角色。 我输入R
它打印 I。
它要求一个角色。 我输入C
它打印 R。

这种情况永远持续下去。如果我按换行符,它就会跳过它。
为什么一开始要求输入两个字符?它不应该执行printf语句吗?
为什么上一个输入的字符会打印在下一个输入中?

最佳答案

scanf 格式中,空格字符与输入中任意数量的空白(空格、制表符和换行符)匹配。

因此,您输入 C + newline 并没有任何反应,因为 scanf 将字符 C%c 匹配并且换行符被空格吃掉了。但 scanf 将继续执行,直到得到不匹配的内容为止。因此,您可以在此处放置任意数量的空格、制表符和换行符。

scanf 读取到不匹配的内容时,它会调用 ungetc(c, stdin) 将其放回 stdin 并返回。因此,空间将继续匹配,直到您放置不同的东西。

这就是为什么当您输入 R + newline 时会返回最后一个 scanf。然后执行下一个 scanf,它将 R%c 以及换行符与空格匹配。但空格仍然匹配任意数量的空格。当您输入非空白字符时,它将结束。

关于c - C 如何处理 scanf 中的尾随空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54844751/

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