如何从java控制台获得用户输入

如何从java控制台获得用户输入,第1张

new Scanner(Systemin)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法。

举例:

Scanner sc= new Scanner(Systemin)

String st = scnextLine();//获取输入信息

该函数的功能是 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。它是非阻塞函数,即执行该函数后程序不会停下,而是进行执行。

其用法,一般是先用该函数判断是否有键盘输入,如果有则用getch等读键盘函数来读取该输入,如果没有键盘输入就继续执行程序。例如:

while(1){

//

if(_kbhit())

{

ch=getch();

if(ch==27) break; //如果按了ESC键则跳出循环

}

}

你好

getchar是只能输入一个字符

putchar只能输出一个字符

两者互相搭配

ch1 = getchar();//得到一个字符

putchar(ch1);//输出一个字符也可以是putchar(getchar())这种格式。

当然你也可以用printf("%c",ch1)输出,和putchar效果一样的只是这个函数也可以多个字符输入。

楼主要注意用这两个函数有个陷阱,我也是刚研究出来的,所以来看看知友是否有类似的疑惑

以便挣点分数,同时分享我的成果。

很久就对getchar()吃回车很疑惑,今天花了将近两个小时总于弄懂了。

ch1 = getchar();

我输入c而实际存放到终端缓存里是c和一个回车。

如果我在写

ch2 = getchar()那么这个getchar会先看一下缓存里有没有字符,没有才可以等待用户输入。

而上面缓存里还有一个回车,所以不会等待用户的输入而直接从缓存里获取,在dos中不会显示光标等用户输入,所以如果进行如下 *** 作

putchar(ch1);//输出字符c

putchar(ch2); //在dos中会发现出现空行,这是因为ch2得到了缓存中的回车了

当然scanf也有这么一个弊端。我进行以下 *** 作:

scanf("%s",str1)//str1是字符数组名;

ch2 =getchar()//同样这里会得到一个上面留在缓存里的回车了;

但是如果

putchar();

scanf("%c",&ch);//这里一个字符会得到回车,而

如果是 scanf("%s",str1) //则不会得到回车了,会在dos出现光标,等待用户输入。

以下是网友解释:

getchar()有一个让人很头疼的特点,这也导致了很多人不喜欢用它……

它会向终端缓存要求一个字符,如果缓存里没有这个字符它就会等待用户输入,于是在用户没有任何多余的输入的情况下,每一次调用它都会等待用户输入一个字符,但是并不是用户输入一个字符它就停止等待了,它的等待是以回车确认作为等待的终止条件的,也就是说,用户可以在回车之前输入n个字符,但是它只会返回第一个字符,其它的所有字符都会保留在终端缓存中,当下一次再执行getchar()的时候,才会从终端缓存中取出并返回这个字符……

由于每一次输入一个字符的时候都要按回车确认以终止等待,所以在缓存中将会存留一个回车,如果不再执行一次取出这个回车,它可能会影响到下一次的输入……

但是往往这不是处理事情的最好方式,因为,用户可能并不是输入一个字符加一个回车,用户可能会输入更多字符和一个回车,这时,这种处理方式反而会得到一种反效果,因为用户可能希望将所有的字符放在一起输入,这时,下一次getchar将是第一次输入中的下一个字符而不再产生等待,而这种处理方式不仅不会去除掉最后的回车(因为此时的回车不再是下一个字符了,而是在整个字符串的最后),反而会使得字符串中下一个字符的输入丢失……

所以getchar的这个特点使得它在实际应用中大受限制,仅仅会在编程学习中发挥一定的作用……同时scanf也有类似的弊病,比如说在请求数字的时候输入字符串之后程序所有的请求数字的scanf将会得到一连串奇怪的返回值……

等等这些在处理复杂的输入时将会使人很头疼……

常用的办法是使用conioh中的getch()编写自己想要的输入,这个函数只会等待一个字符,而不会等待回车……

下面是使用技巧:

可以用上面地方法用循环连环输入,如下:ch = getchar()//在dos中输入一串字符;for(ch!='#') {putchar(ch);ch=getchar();//会将上面的留在缓存中的字符一个个输出来,原因上面讲了,这个getchar会先在缓存中查看有没有留在缓存中的字符,有就直接接收了,没有才会等待用户的输入。网友的解释已经很清楚了,我也是从上面领悟的,差不多也应该是这样了。其实也没必要深究,了解即可。

希望能帮到你。

以上就是关于如何从java控制台获得用户输入全部的内容,包括:如何从java控制台获得用户输入、C语言 大神指导! _kbhit函数应该怎么用或者有更好的方法读取键盘输入方法!!、putchar和getchar的联系关键在于两者的配合使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9643461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存