
一、总表末尾换行 \n 规则https://download.csdn.net/download/2601_95085114/9310717二、逐个详细拆解 输入函数从键盘读数据到内存1. gets(char *str)禁用流程1. 不断读取字符直到按下回车2. 回车\n直接扔掉不放进数组3. 在有效文字的最后自动添加 \0。例子输入 abc回车内存a b c \02. fgets(str, size, stdin)标准安全函数流程1. 最多读取 size-1 个字符遇到回车就停止2. 回车符 \n 会保存在数组里3. 在全部字符的末尾系统自动补上 \0。例子输入 abc回车内存a b c \n \03. s_gets()自己封装的改良版fgets标准写法读到\n之后将换行符覆盖为\0。if (fgets(str,81,stdin)){str[strcspn(str,\n)] \0;}输入abc回车 → 内存a b c \04.scanf(%s, str)1. 跳过开头所有空格、回车2. 之后持续读字符再次碰到空格/回车就结束3. 空白字符全部丢弃数组里绝对不会有\n4. 末尾自动加\0。缺陷无法输入带空格的内容。5.getchar()一次只读取一个字符回车 \n 也是普通字符。常用于场景scanf读完数字后吃掉缓冲区剩下的换行。scanf(%d,a);getchar(); // 把回车吸收掉防止fgets读到空行 输出函数把内存字符打印到屏幕1.puts(str)• 从首字符开始打印碰到\0结束• 强制规则打印完字符串自动额外输出一个换行 \n。puts(hi);// 屏幕输出hi 自动换行2.fputs(str, stdout)• 原样输出字符串读到\0停止• 不会自动追加任何换行符。想要换行必须手动写fputs(hi,stdout);putchar(\n);3. printf()严格照搬你写的内容• printf(abc);只输出abc不换行• printf(abc\n);输出abc然后换行。4. putchar(ch)仅仅输出单个字符。putchar(\n) 等价于换行操作。三、高频易错口诀1.输入• gets吃掉回车补\0• fgets收留回车末尾补\0• scanf遇见空格就停下完全不带换行。2.输出• puts自带换行• fputs不带换行• printf/putchar你不加\n就永远不换行。四、经典坑点用scanf(%d)读取数字之后缓冲区还残留回车\n下一次直接用fgets会直接读到这个换行造成空输入。解决方法读取数字后加一句 getchar(); 清空换行。