%c前方加个空格是什么道理

%c前面加个空格是什么道理?
下面一个程序可以用fflush(stdin)清除缓冲区来消去换行符,但是我看到别人用在 %c前面加空格也达到目的,是什么原因?


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   
    int i ;
    char c[5];

    for(i = 0; i < 5; i++)
    {
        scanf(" %c",&c[i]);  //在%c前面加个空格是什么道理?
       /* fflush(stdin);*/
       printf("%c\n",c[i]) ;
    }

 return 0; 
}

------解决方案--------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

------解决方案--------------------
估计写的人是想输入的几个数字之间用空格分开, 要不然连在一起识别成一个数字了.
其实不需要, 两次 int 读入中间会忽略空格的.
------解决方案--------------------
引用:
又在网上看到一些解释,原来许多人像我一样也问过这个问题,有两种解释我有点明白了:

一、%c前加了空格就是用来屏蔽空白符的。 不加空格,scanf会读取输入中的第一个字符;加了空格,scanf会读取输入中的第一个非空白符。

二、scanf() 函数允许把普通字符放在格式字符串中。除了空格字符之外的普通字符一定要与输入字符串准确匹配。格式字符串中的空格意味着跳过下一个输入项之前的任何空格。(“任何空格”的概念包括没有空格的特殊情况)
如果在格式字符传中%c之前有一个空格,那么scanf() 会调到第一个非空白字符处。也就是说,命令scanf(“%c”, &ch) 读取在输入中遇到的第一个字符,而scanf(“ %c”, &ch) 则读取遇到的第一个非空白字符。 

我还想问现在是不是用fflush(stdout)少了,因为我的编译器不需要fflush(stdout)也是正常输出的。


可能你的程序是单进程单线程的
------解决方案--------------------
引用:
AnYidan,我不明白什么叫单进程单线程?

暂时先别管进程线程的,先学好C语言吧,总有一天你看到这两个概念,你会自然而然地明白他们的意思。
------解决方案--------------------
scanf里的空格就是吃掉连续一串(可以为空)空白符(空格,tab,换行)。
------解决方案--------------------
引用:
Quote: 引用:

scanf里的空格就是吃掉连续一串(可以为空)空白符(空格,tab,换行)。


这是固定用法吗?
怎么理解?
why?
标准规定