我试图在循环中接受输入。我如何知道输入何时停止?比方说,我有一个int input
,只要用户需要,我就会接受输入。但是我没有在每次进入之前提示。我不是在询问用户是否有更多输入,也不是我事先知道输入的数量。
如何停止接收输入?
这是我到现在为止。
while(1){
scanf("%d",&input);
if(conditionFulfilled)
index=0;
if(index)
printf("%d",input);
}
在这里,只要条件不满足,我就打印一切。但是一旦条件满足,我会继续接受输入,但不要打印它们。我怎么知道输入何时停止?
我现在会试着让自己更清楚。
我想要做的是,我希望用户继续输入数字,现在我想以相同的顺序打印这些数字,但是一旦用户输入的数字大于50,我就不想打印它之后的任何数字。
此外,我不希望用户在达到上述条件后停止输入输入。此外,我每次都可以询问用户是否要输入更多号码?我只是希望他继续进入,然后一旦他完成了。我应该得到所需的打印输出。
但我无法弄清楚,我怎么知道用户是否完成了所有输入。
我原以为我可以将输入存储为字符,因为newLine存储在字符中但不存储在整数输入中。即scanf("%c",&input)
。将存储\n
字符,但如果它是scanf("%d",&input)
将忽略所有newLines,现在我可以检查两个连续的换行符,这将阻止它。
嗯,我不确定这是不是正确的方法?
另外,如果我输入4
然后按Enter键,现在4和enter
都在输入流上,现在我如何清除newLine字符的输入流,并且只需要在我的变量4?
我希望现在更有意义吗?
编辑:我猜上面的解决方案无法正常工作,因为如果我将输入作为char
我将无法处理22
,因为它只需要前2个并离开另一个一个只在缓冲区中。
答案 0 :(得分:0)
最好在getchar()
循环中使用while
并使用CTRL+D
作为输入的EOF
终结符。(但请确保您有足够大的缓冲区来存储输入)。
如果输入小于大小,则可以realloc
获取新大小。这样可以节省空间。
答案 1 :(得分:0)
如果您只是在输入类似于20 20 foo 30
的情况下只接受前2个输入时感到满意,那么就这样做:
while( scanf( "%d", &input ) == 1 )
但是,在任何合理的程序中,您都希望更优雅地处理无效输入。
答案 2 :(得分:0)
如果您希望用户执行以下操作:
5<enter>
16<enter>
3<enter>
...
只要他们愿意, 就无法知道 何时完成。我假设你正在谈论这种情况,因为你正在循环一个输入。
在这种情况下,你必须通过一个终止序列设置用户的结束状态,例如“输入-1停止”或者通过设置输入前的输入数量,“输入10个值”。
但是,如果您想同时接受任意数量的值,例如:
5 16 3 ... <enter>
然后,您可以将值读入包含scanf()
的字符串,并在您的令牌字符周围分开(在这种情况下为空格)。如果你想这样做,你不需要循环。
因此,我们在您的代码中说条件aFulfilled是0
的输入,并且您希望在输入-1
时中断:
while(1){
scanf("%d",&input);
if(input == 0)
index=0;
else if(input == -1)
break;
if(index)
printf("%d",input);
}
现在代码将继续输入和打印数字,直到他们输入0
,此时它会继续记录数字,但在输入为-1
之前不会使用它们。
编辑:
Well, I am not sure if it is the right way?
实际上没有“正确的方法”,这是你的计划,所以这取决于你。我的回答的第一部分解释了这一点,您必须定义您想要如何接受输入。你想让他们一次输入一个号码吗?你想要他们全部在一条线上吗?这取决于你!
Edit: I guess the above solution wont work, since if I am taking in the input as char I wont be able to process 22 since It will just take the first 2 and leave the other one in buffer only.
不,您的代码将它们作为整数%d
。如果您将它们作为字符%c
,那么是的,您是正确的多位数字,您必须做特别的工作:
如果用户输入22<enter>
,您必须循环播放字符直到换行符,并且您必须按顺序移动数字:
2 * 10^1 + 2 * 10 ^0 = 22
Also, say if I enter 4 and then hit enter, now 4 and enter both are on the input stream, now how can I clear this input stream for the newLine character, and just take in 4 in my variable?
如果您只通过scanf("%d", &input)
读取数字,那么您不必担心换行符号。
希望有所帮助。