为什么while循环没有额外的"或"条件?

时间:2014-10-17 03:06:56

标签: java loops while-loop

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

问题是它只是说“请输入一个字符串”。用户输入一个字符串,单击“Enter”,它就会停留在下一行。 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;           
}

2 个答案:

答案 0 :(得分:1)

如果你希望当索引大于或等于maxlength时循环到 end 那么你需要条件为相反:它应该循环 索引大于或等于maxlength。

while (character != '\n' && index < maxlength)

答案 1 :(得分:1)

  

为什么while循环没有额外的“或”条件?

因为如果index 大于 maxlength,您的测试会继续循环播放。

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


  

有没有办法让用户在最大长度后不再输入任何字符?

这取决于你的意思:

  • 如果您在&#34; max&#34;之后询问是否有办法停止接受字符。已经读完了,@ JohnKugelman的回答说明了怎么做。 (问题是直到行尾的字符仍然未读...如果您然后尝试接受用户的另一个项目,您的应用程序将首先看到这些字符。例如,如果您调用getaline再次......)

  • 如果您想在&#34; max&#34;之后忽略字符已阅读,然后您需要更改代码,以便它不会停止在&#34; max&#34;处读取,但如果message较少,则只会将其添加到index比最大

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