网站建设行业研究,最近实时热点新闻事件,大型交流论坛平台有哪些,手机可以开发软件吗今天非常的突发气象的在acm上面做了一下题目#xff0c;悲剧的是多年不用c的人忘记了怎么样的使用scanf了#xff0c;今天还学到了一点东西。 题目里面提示了输入两个数#xff0c;规定第1#xff5e;6列是第一个数的范围#xff0c;第8#xff5e;9列是第二个数的范围。…今天非常的突发气象的在acm上面做了一下题目悲剧的是多年不用c的人忘记了怎么样的使用scanf了今天还学到了一点东西。 题目里面提示了输入两个数规定第16列是第一个数的范围第89列是第二个数的范围。然后第一个数字可能没有6位而第二个数字可能没有两位那么连个数字中间可能出现多个空格而我们一般的使用scanf的方式对于其参数的规定是%d %d中间加空格的方式来得到数据的比如说scanf(%d %d, x, y);而这种方式获得的数据规定了scanf的数据的结束的方式看到空格就结束而对于上面的两个数据中间的空格可能很多当第一个数据获得了以后第二个数据获取的时候可能在数据前有空格而这个给%d的话会由于出错而结束。 而对于scanf函数的方式获取内容有一个特点对于scanf(%d%d,x,y),中间没有规定结束的符号的时候scanf是根据自己的方式来结束的那么这几种方式是 ① 遇空格、“回车”、“跳格”键。 ② 遇宽度结束。 ③ 遇非法输入。 因此对于中间空格很多的时候第一个数直接赋值给了x然后遇到空格说明没有数据直到遇到第二个数据的时候进行赋值然后就遇到了回车 结束了。这对与%s 也是对的. 实例1 1 #include stdio.h 2 #include math.h 3 #include stdlib.h 4 #include malloc.h 5 #include string.h 6 int main(int argc, char argv[]) 7 { 8 char *r; 9 int n;10 r (char *)malloc(1024*sizeof(char));11 memset(r, \0, 1024);12 if(scanf(%s%d, r, n) ! 2)return 0;13 printf(%s,%d\r\n, r, n);14 return 0;15 } 输入数据是 95.123 12或者是95.123 12等等中间无论多少空格的时候 得到的结果是 95.123,12转载于:https://www.cnblogs.com/onlylittlegod/archive/2010/12/01/1893561.html