C如何处理scanf中的尾随空格? [关闭]

问题描述 投票:-2回答:1

如果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. 它打印我。 它要求一个角色。我输入C. 它打印R.

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

c character scanf
1个回答
2
投票

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

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

当qazxsw poi读取不匹配的内容时,它会调用qazxsw poi将其放回stdin并返回。所以空间将继续匹配,直到你把不同的东西。

这就是为什么当你输入scanf时,最后一个ungetc(c, stdin)会返回。然后下一个scanf执行,它匹配R + newlinescanf和换行符与空格。但是空间仍然匹配任何数字空格。当您键入非空白字符时,它将结束。

© www.soinside.com 2019 - 2024. All rights reserved.