基克船长告诉我scanf是可以读空格的,比赛的时候是不能用gets的,getchar是可以代替gets的。
本菜鸡就去搜了一下,整合如下:

scanf 读一行

#include <stdio.h> 
int main() 
{ 
    char str[80]; 
    scanf("%[^\n]",str); //读到'\n'结束读取
    printf("%s",str);
    return 0; 
}

延申:

//读到'\n'结束读取,存入str,再抛弃一个字符
scanf("%[^\n]%*c",str);
//读到'\n'结束读取,并将其读到的数据抛弃,然后再抛弃一个字符(这个字符是'\n')
//此时缓存中不存在任何字符
scanf("%*[^\n]%*c");

getchar 这样是读字符 如果是数字的话就用一个游标一个个读 大概也类似吧

int c;
while((c=getchar())!='\n'&&c!=EOF); 
//读取一个字符,直到是\n或者是EOF停止
//等价于
scanf("*[^\n]");

通过这种方法省略前置字符串

#include <stdio.h>
   int main()
   {
       char  c;    
       //直到遇到字符a停止读取,
       //舍弃a
       //读取将a后的一个字符存入变量c
       scanf("%*[^a]%*c%c",&c);
       printf("%c\n",c);
       return 0;
   } 
输入:bcdeaf 
输出:f