赞
踩
今天刷C语言网题号1094题的时候,遇到个奇怪的事情。题目要求是先输入一个n,然后接下来要输入n行字符串。
按理来说很简单,就nextInt()获取n后,用循环输入nextLine()就可以了,但奇怪的是for循环如果条件写成(int i=0;i<n;++i)后,会少一行。并且最后一个还没输入默认就是null了。
网上查了查,知道了是因为前面用过了类似nextInt()这样的函数。两种函数消息处理机制不同,当nextInt()读取到回车符或者换行的时候,就会停止且拿走前面的数据,但同时也会留下来一个回车符或者换行。而nextLine()读取到换行就会结束,所以相当于还没开始就结束了。。。
解决方案应该有很多,都用nextLine()然后把第一个转换成int感觉比较方便;或者也可以用完nextInt()之后再单独写一个nextLine()。
然后这道题还有一个地方就是,最后要按照空格来分字符串,听起来也很简单,用split就行,不过看了题解大佬的答案后,发现用split("\s+")更对,split(" ")不能判断多个空格连续的情况。
让我想起来之前写c#遇到过这种情况,当时用的是c#的split的StringSplitOptions.RemoveEmptyEntries重载函数。
害~不得不说路漫漫其修远兮啊
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。