《C语言解惑》—— 2.4 空格让scanf莫名其妙

简介:

本节书摘来自华章出版社《C语言解惑》一 书中的第2章,第2.4节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 空格让scanf莫名其妙

【例2.6】程序中的scanf函数含有空格,是否能通过编译?请分析运行结果。

 #include<stdio.h>
 void main( )
 {
      int x,y,z;
      scanf ( "%d%d%d ", &x, &y, &z );
      printf ( "%d, %d,%d\n", x, y, z );  
}

【分析】在最后一个“%d”和“"”之间留有空格的语句
scanf ( "%d%d%d ", &x, &y, &z );
与没有留空格的语句
scanf ("%d%d%d", &x, &y, &z );
的功能是不一样的。前者在“%d”后面有空格,虽然能通过编译,但运行时的结果不一样。至于是留一个还是多个空格,结果却是一样的。含有空格的程序,在输入三个数据并按回车后,程序丝毫没有反应。再输入一个数据,才能继续运行并输出前三个数据。例如输入数据“1 2 3 4”,则输出“1,2,3”。语句
scanf ( " %d %d %d", &x, &y, &z );
是在格式说明符中间和前面有空格,这种情况能得到正确结果。由此可见,最后一个%d与双引号之间不能有空格。

相关文章
|
3月前
|
C语言
【C语言基础考研向】05 scanf读取标准输入超详解
本文详细解析了C语言中`scanf`函数的工作原理及常见问题。首先介绍了`scanf`如何处理标准输入,并通过示例说明了为何有时会出现阻塞现象及其解决办法。接着探讨了当输入包含多种数据类型时,特别是字符型数据的处理方式,强调了格式控制的重要性,并给出了正确的输入格式示例。通过正确配置,可以避免因空格和换行符导致的问题,确保数据准确读取。
115 10
|
2月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
243 0
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
113 8
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
4月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
193 2
|
4月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
94 1
|
4月前
|
存储 安全 编译器
C语言中的scanf函数
C语言中的scanf函数
123 1
|
6月前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
7月前
|
IDE 测试技术 开发工具
|
6月前
|
存储 缓存 移动开发
【C语言基础篇】scanf()函数详解
【C语言基础篇】scanf()函数详解