如何在接收多个字符串时清除缓冲区?

dus*_*shu 7 c

如果我输入的str1长度超过长度10,则其余部分将保留在缓冲区中并进入我的状态str2.如何清除缓冲区之前str2,我可以输入吗?

#include <stdio.h>
int main(void)
{
    char str1[10];
    char str2[10]; 
    fgets(str1,10,stdin);
    fgets(str2,10,stdin);

    puts(str1);
    puts(str2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*kar 2

fgets(str1,10,stdin);做完之后

while((c = getchar()) != '\n' && c != EOF);
Run Code Online (Sandbox Code Playgroud)

这将在读取“str1”后清除输入缓冲区。

所以你的代码应该是

#include <stdio.h>
int main()
{
    char str1[10];
    char str2[10]; 
    int c;
    str1[0]=0;
    str2[0]=0;
    fgets(str1,10,stdin);
    if( (str1[0]!=0) && (!strrchr(str1,'\n')) )
        while((c = getchar()) != '\n' && c != EOF);
    fgets(str2,10,stdin);
    puts(str1);
    puts(str2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)