1、C语言的缓冲区会带来一些负面影响

  • fflush(stdout); //本次输出结束后立即清空输出缓冲区int c;while((c = getchar()) != '\n' && c != EOF);//使用 getchar() 清空输入缓冲区scanf("%*[^\n]"); scanf("%*c"); //在下次读取前清空输入缓冲区

    2、scanf的高级用法

  • scanf("%2d", &n);//表示最多读取两位整数char str[30];scanf("%[abcd]", str);//表示只读取字符abcdscanf("%[a-zA-Z]", str);//只读取字母scanf("%[^0-9]", str1);//表示读取除0-9以外的所有字符scanf("%[^\n]", str2);//读取一行字符串,即代替gets()函数功能,能够读取带空格的字符串/*%*d表示读取一个整数并丢弃;%*[a-z]表示读取小写字母并丢弃;%*[^\n]表示将换行符以外的字符全部丢弃。*/

3、在用 gets() 函数读取字符串的时候,有一些编译器会提示不安全,建议替换为 gets_s() 函数,就是因为 gets() 不能控制读取到的字符串的长度,风险极高。