【C语言】scanf函数完全指南(与数据类型变量联动)——新手必看
接上一篇《数据类型与变量详解》本文讲解如何用scanf从键盘读取输入存入变量。适合C语言初学者 | 刚学完变量 | 总遇到scanf跳过的同学难度⭐☆☆☆☆1/5目录1. 思维导图文字版2. scanf的基本用法3. scanf与各种数据类型的搭配4. 常见问题与避坑缓冲区问题、符号、空格处理5. 完整代码示例可直接运行---一、思维导图文字版textscanf 输入函数│├── 头文件│ └── #include stdio.h│├── 基本格式│ └── scanf(格式控制字符串, 变量1, 变量2, ...);│├── 格式说明符核心│ ├── %d → int整型│ ├── %hd → short│ ├── %ld → long│ ├── %lld→ long long│ ├── %u → unsigned int│ ├── %f → float注意不是%lf│ ├── %lf → double牢记│ ├── %c → char字符│ ├── %s → 字符串数组│ └── %x/%o → 十六进制/八进制│├── 特殊规则│ ├── 变量前面必须加 │ ├── 字符串数组不加 │ ├── %c 会读空格/回车 —— 容易踩坑│ └── 输入格式必须与格式串匹配│└── 返回值└── 成功读取的变量个数---二、scanf的基本用法c #include stdio.h int main() { int age; printf(请输入年龄: ); scanf(%d, age); // 注意 符号 printf(年龄是: %d\n, age); return 0; }关键点· 是取地址符告诉scanf“变量的位置在哪”· 忘记写 → 程序崩溃或乱读数据常见错误---三、scanf与各种数据类型的搭配变量类型 格式符 示例int %d scanf(%d, num);short %hd scanf(%hd, s);long %ld scanf(%ld, L);long long %lld scanf(%lld, ll);unsigned int %u scanf(%u, u);float %f scanf(%f, f);double %lf scanf(%lf, d);char %c scanf(%c, ch);char[]字符串 %s scanf(%s, str);不用示例代码c int i; float f; double d; char c; char name[100]; scanf(%d, i); // 整数 scanf(%f, f); // float必须 %f不是 %lf scanf(%lf, d); // double必须 %lf scanf(%c, c); // 字符 scanf(%s, name); // 字符串不用 ---四、常见问题与避坑指南坑1double 用了 %fc double d; scanf(%f, d); // 错误double必须用 %lf scanf(%lf, d); // 正确 printf 中 double 可以用 %f但 scanf 中 double 必须 %lf两者不同。坑2忘记 c int x; scanf(%d, x); // 错误x没写程序崩溃 scanf(%d, x); // 正确 坑3%c 会读走上次的回车缓冲区残留c int n; char ch; scanf(%d, n); scanf(%c, ch); // 这个会读走回车符而不是新输入的字符 解决方案1用空格吃掉残留c scanf(%d, n); scanf( %c, ch); // 注意 %c 前有个空格 解决方案2用 getchar() 吃掉回车c scanf(%d, n); getchar(); // 吃掉回车 scanf(%c, ch); 坑4%s 不能读空格c char str[100]; scanf(%s, str); // 输入 hello world → 只读 hello 要读带空格的字符串用 fgets(str, 100, stdin);坑5一次读取多个变量时输入格式要匹配c int a, b; scanf(%d,%d, a, b); // 必须输入 3,5有逗号 scanf(%d %d, a, b); // 推荐用空格分隔输入 3 5 ---五、完整代码示例可直接运行c #include stdio.h int main() { // 整型家族 int iNum; short sNum; long lNum; long long llNum; unsigned int uNum; printf( 整型输入 \n); printf(请输入int: ); scanf(%d, iNum); printf(请输入short: ); scanf(%hd, sNum); printf(请输入long: ); scanf(%ld, lNum); printf(请输入long long: ); scanf(%lld, llNum); printf(请输入unsigned int: ); scanf(%u, uNum); // 浮点型 float fVal; double dVal; printf(\n 浮点型输入 \n); printf(请输入float: ); scanf(%f, fVal); printf(请输入double: ); scanf(%lf, dVal); // 字符与字符串 char ch; char name[100]; printf(\n 字符/字符串输入 \n); printf(请输入一个字符: ); scanf( %c, ch); // 空格处理残留回车 printf(请输入字符串不含空格: ); scanf(%s, name); // 注意name前不加 // 一次读取多个变量 int x, y; printf(\n 多变量输入 \n); printf(请输入两个整数空格分隔: ); scanf(%d %d, x, y); // 打印结果 printf(\n 输出结果 \n); printf(整型: %d, %hd, %ld, %lld, %u\n, iNum, sNum, lNum, llNum, uNum); printf(浮点型: %.2f, %.2lf\n, fVal, dVal); printf(字符: %c\n, ch); printf(字符串: %s\n, name); printf(两数之和: %d %d %d\n, x, y, x y); return 0; }运行示例 整型输入 请输入int: 100请输入short: 200请输入long: 123456请输入long long: 9876543210请输入unsigned int: 4000000000 浮点型输入 请输入float: 3.14请输入double: 3.1415926 字符/字符串输入 请输入一个字符: A请输入字符串不含空格: Hello 多变量输入 请输入两个整数空格分隔: 10 20 输出结果 整型: 100, 200, 123456, 9876543210, 4000000000浮点型: 3.14, 3.14字符: A字符串: Hello两数之和: 10 20 30---六、scanf返回值进阶c int result scanf(%d %d, a, b); // 返回成功读取的变量个数 // 如果读到文件末尾或出错返回 EOF-1 if (scanf(%d, n) ! 1) { printf(输入不合法\n); } ---七、格式符速查表贴墙上类型 scanf格式符 示例int %d scanf(%d, n)short %hd scanf(%hd, s)long %ld scanf(%ld, L)long long %lld scanf(%lld, ll)unsigned int %u scanf(%u, u)float %f scanf(%f, f)double %lf ⚠️ scanf(%lf, d)char %c scanf( %c, ch) ⚠️字符串 %s scanf(%s, str)⚠️ 标记的是最容易出错的地方---八、总结背下这5点1. 变量前面必须有字符串数组除外2. double必须用%lf和printf不同易错3. %c前加空格防止读入残留的回车4. %s不能读空格如需读取带空格的字符串用fgets5. 检查返回值可以判断输入是否成功---如果觉得有用欢迎 点赞 收藏 转发
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2561331.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!