scanf读字符串的缺点和fgets的补充
scanf 在遇到带空格的字符串输入时 有两种做法:
- 在 %s 中带正则 ;
- 使用 fgets 来获取; 偶尔需要配合 getchar 来吃掉 \n
#include "cstdio" #include "string" // scanf 没读出来的东西 不代表它就不存在了 它还在缓冲区 // 程序没有退出,缓冲区就是不干净的。 int main() { // 第一次 name中包含的 name 遇到 空格停止了读取, // 缓冲区还剩 空格 和 Ma char name[30]; scanf("%s", name); //Jack Ma printf("%s\n", name); //Jack // fgets 将缓冲区的 空格 和 Ma 还有\n读取了出来 注意看输出 // char *fgets(char * __restrict, int, FILE *); fgets(name, sizeof(name), stdin); printf("%s\n", name); // Ma和\n return 0; }