首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》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与双引号之间不能有空格。