Lesson16 PoEdu培训第二课 C语言篇(8) scanf详解
文章类别: 培训笔记 0 评论

Lesson16 PoEdu培训第二课 C语言篇(8) scanf详解

文章类别: 培训笔记 0 评论

scanf详解

思维导图

Alt 前置代码

注意事项

scanf函数不会有任何的类型转换, 所以我们一定要使用正确的格式控制符来进行接收参数!
scanf并不会认为输入的内容可以转换

当它发现当前缓冲区内的内容与格式控制符不同时, 它会放弃写入, 缓冲区的内容不会发生变化.
scanf函数不是一个安全的函数, 它的不安全来源于:
1.输入内容必须和控制符完全对应
2.会造成缓冲区溢出, 推荐scanf_s函数

scanf在读取字符串的时候, 是按照空格来分隔的.
scanf在读取数据的时候, 是完全按照格式控制字符串来进行匹配的.

也就是说, 我们必须拿着scanf规定的相同的类型, 相同的格式才能按照我们的想法输入到我们指定的变量之中.
scanf("%d %d", &iVal1, &iVal2);, 在这句话中, 我们输入 10 10就能进行正确的读取.
如果我需要让用户输入指定个数的整数, 那么我们使用 %d%d%d 这样的方式是最安全的!

缓冲区内的内容被读取后, 被读取的内容会消失.

作业

1. 不运行代码写出下面语句的执行结果:(未知的值请写出未知理由及原因)
    printf("%2.2lf", 2.33333);
    printf("%c%c%c", 'A', '49', '\44');
    printf("%10+-.3lf", 3.1415927);
2. 请写出下列各项的转换说明符:
    1).宽度和位数相同的十进制整数
    2).232.666, 使用0填充至10位
    3).宽度为30, 左对齐的字符串
    4).宽度为12的十六进制的整数
    5).宽度为15的unsigned long的整数
    6).宽度为7, 左对齐, 字符串中的前5个字符.
3. 请写出读取下列内容的转换说明符
    1). 10109
    2). 22.1111
    3). ILoveMark
    4). I Love Mark (要求一次性读取完成)
    5). if 22 (只读取数值)
4. 编程练习
    1). 提示用户以 "姓 名" (英语)的格式输入, 用 "名姓" 的方式打印.
    2). 同上题输出
        a). 包括双引号的姓名("姓 名")
        b). 打印宽度为20, 左端打印.
    3). 要求用户输入当前带宽(MB)以及所需要下载文件的大小(GB), 计算出所需要的时间(小时), 公式为: 需要下载的大小(MB)/(带宽大小/10)=需要的秒数
    4). 使用头文件和宏打印出所有基础类型的最大值和最小值. 

如有错误,请提出指正!谢谢.

回复