Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';t while循环以额外的“结束”;或;条件_Java_Loops_While Loop - Fatal编程技术网

Java 为什么';t while循环以额外的“结束”;或;条件

Java 为什么';t while循环以额外的“结束”;或;条件,java,loops,while-loop,Java,Loops,While Loop,我希望while循环在条件“index>=maxlength”时结束 问题是它只是说“请输入一个字符串”。用户输入一个字符串,单击“回车”,它就停留在下一行。while循环之后的任何内容都不会执行 Please Enter a String: *ddddddddddd* | 如果我没有条件“index>=maxlength”,代码就可以正常工作 public static int getaline( char message[], int maxlength ) { int ind

我希望while循环在条件“index>=maxlength”时结束

问题是它只是说“请输入一个字符串”。用户输入一个字符串,单击“回车”,它就停留在下一行。while循环之后的任何内容都不会执行

Please Enter a String: *ddddddddddd*
|
如果我没有条件“index>=maxlength”,代码就可以正常工作

 public static int getaline( char message[], int maxlength ) {

    int index = 0;
    int character = 0;
    maxlength = 5;

    System.out.print("Please enter a string: ");
    character = fgetc(System.in);

    while (character != '\n' || index >=maxlength){
        message[index] = (char) character;
        index++;
        character = fgetc(System.in);
    }
    if (index >= maxlength){
        System.out.println("Overflow");
    }
    System.out.println("The amount of elements in the array is" + index);
    return 0;           
}
如果希望循环在索引大于或等于maxlength时结束,则需要条件为相反的:它应该在索引不大于或等于maxlength时循环

while (character != '\n' && index < maxlength)
while(字符!='\n'&&index
为什么while循环不以额外的“or”条件结束

因为您的测试表明,如果
index
大于
maxlength
,则继续循环

它是在做你说的,而不是你的意思。计算机是这样的:-)



是否有一种方法不允许用户在最大长度之后输入更多字符

这取决于你的意思:

  • 如果你问是否有办法在读了“max”之后停止接受字符,@JohnKugelman的回答说如何。(问题是直到行尾的字符仍然未读…如果您尝试从用户处接受另一项,您的应用程序将首先看到这些字符。例如,如果您再次调用
    getaline

  • 如果要忽略读取“max”后的字符,则需要更改代码,使其不会在“max”处停止读取,但如果
    索引
    小于最大值,则只会将它们添加到
    消息中

  • 如果要阻止用户输入字符,则没有简单的方法。也许,根本不可能。(您很可能不想尝试这样做,因为这会带来其他各种问题。)


fgetc做什么?@SotiriosDelimanolis“文件获取字符”…我想,它重定向到stdin…@MadProgrammer是不是有一些奇特的c函数?@SotiriosDelimanolis肯定让我想起了一个…有没有办法不允许用户在最大长度之后输入更多字符?非常感谢。我采纳了你的建议,对第一个字符使用了“null”来表示超过最大长度的未读字符。我尝试向while循环中添加另一个条件CTRL+D,以便退出终端。示例“while(character!='\n'&&index,当您从控制台在应用程序中键入^D时,这将导致输入流在使用前面的字符后结束。这将导致
InputStream.read()
返回
-1
。如果您的
fgetc
方法返回
char
,则将
fgetc
的结果与
-1
进行比较,将始终给出
false