【问题标题】:Why doesn't the while loop end with the extra "or" condition?为什么 while 循环不以额外的“或”条件结束?
【发布时间】:2014-10-17 03:06:56
【问题描述】:

我希望 while 循环在条件“索引 >=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;           
}

【问题讨论】:

  • fgetc 是做什么的?
  • @SotiriosDelimanolis “文件获取字符”...我假设,它重定向到标准输入 ...
  • @MadProgrammer 那是花哨的 c 函数吗?
  • @SotiriosDelimanolis 当然让我想起了一个......

标签: java loops while-loop


【解决方案1】:

如果您希望循环在索引大于或等于 maxlength 时结束,那么您需要条件为 相反:它应该循环 索引大于或等于maxlength。

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

【讨论】:

    【解决方案2】:

    为什么while循环不以额外的“或”条件结束?

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

    按你说的做,而不是按你的意思做。电脑就是这样的:-)


    有没有办法在最大长度之后不允许用户输入更多字符?

    这取决于你的意思:

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

    • 如果您想在读取“max”之后忽略字符,那么您需要更改代码以便它不会在“max”处停止读取,但它只会将它们添加到 message if index 小于最大值。

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

    【讨论】:

    • 有没有办法在最大长度之后不允许用户输入更多字符?
    • 谢谢。我接受了您的第一个建议,并将“null”应用于超过最大长度的未读字符。我尝试在 while 循环中添加另一个条件 CTRL+D,以退出终端。示例 "while (character != '\n' && index
    • 当您从控制台在应用程序中键入 ^D 时,会导致输入流在前面的字符被消耗后结束。这将导致InputStream.read() 返回-1。如果您的fgetc 方法返回char,那么比较fgetc-1 的结果将始终得到false
    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 2019-06-16
    • 2014-01-25
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    相关资源
    最近更新 更多