C语言getchar和scanf接收回车的问题


#include <stdio.h>

void test(char *Vertex)
{
    int i;
    printf("输入各顶点信息\n");
    for(i=0;i<5;i++)            //输入顶点 
    {
        getchar();
        printf("第%d个顶点:",i+1); 
        scanf("%c",&Vertex[i]);
    }
}

int main() 
{
    char Vertex[5];
    int GraphType,VertexNum,EdgeNum;
    printf("输入生成图的类型(0:无向图,1:有向图):"); 
    scanf("%d",&GraphType);                    //输入图的种类 
    printf("输入图的顶点数量和边数量:");
    scanf("%d,%d",&VertexNum,&EdgeNum);        //输入图的顶点数量和边数量 
    test(Vertex);
    return 0;
}

img

img

我输入了2次数据,产生了两个回车,进入第一次循环后getchar()接收一个回车,scanf为什么没有接收另一个回车,而是等待我输入第一个顶点?

当我把getchar()删除后,进入第一次循环后scanf应该是读取了一个回车,那么第二次循环为什么scanf没有接收另一个回车,而是等待我输入第二个顶点?


for(i=0;i<5;i++)            //输入顶点 
    {
        getchar();
        printf("第%d个顶点:",i+1); 
        //加一条语句
        fflush(stdin);
        scanf("%c",&Vertex[i]);
    }

scanf 和 getchar 用法不同。

img

img


http://www.cplusplus.com/reference/cstdio/scanf/


在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
[size=24px][code=c]//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。[/code][/size]