我希望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;
}
答案 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
比最大
如果您想阻止用户输入字符,则没有简单的方法。也许,根本没办法。 (你很可能不想尝试这样做,因为它会引入各种其他问题。)