1

我试图在一个循环中输入。我怎么知道输入何时停止?比如说我有一个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)会忽略所有换行符,现在我可以检查两个连续的换行符,这将停止它。

好吧,我不确定这是否是正确的方法?

另外,假设我输入4然后按回车键,现在 4 并且enter两者都在输入流上,现在我如何清除这个输入流中的 newLine 字符,并在我的变量中输入 4?我希望它现在更有意义?

编辑:我想上面的解决方案不会起作用,因为如果我接受输入,因为char我将无法处理22,因为它只会占用前 2 个并将另一个留在缓冲区中。

4

3 回答 3

0

最好getchar()while循环中使用并使用CTRL+D哪个EOF作为输入的终止符。(但请确保您有足够大小的缓冲区来存储输入)。

如果 input 小于 size ,你可以realloc为新的 size 。这样你可以节省空间。

于 2012-12-10T18:48:56.337 回答
0

如果您很高兴只在输入类似于: 时采用前 2 个输入20 20 foo 30,那么只需执行以下操作:

while( scanf( "%d", &input ) == 1 )

但是,在任何合理的程序中,您都希望更优雅地处理无效输入。

于 2012-12-10T18:54:29.410 回答
0

如果您希望用户执行以下操作:

5<enter>
16<enter>
3<enter>
...

只要他们愿意,你知道他们什么时候完成。我假设这是您正在谈论的情况,因为您正在循环单个输入。

在这种情况下,您必须通过终止序列(例如“输入 -1 停止”)或通过预先设置输入数量“输入 10 个值”来为用户设置结束状态。

但是,如果您想一次接受任意数量的值,例如:

5 16 3 ... <enter>

然后,您可以将该值读入一个字符串,scanf()并在您的标记字符(本例中为空格)周围将其分开。如果你想这样做,你不需要循环。


因此,假设在您的代码中 conditionaFulfilled 是 的输入0,并且您想在他们输入 a 时中断-1

while(1){
scanf("%d",&input);
if(input == 0)
  index=0;
else if(input == -1)
   break;  
if(index)
printf("%d",input);
}

现在代码将继续输入和打印数字,直到它们输入 a 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),那么您不必担心换行符。

希望有帮助。

于 2012-12-10T18:58:32.020 回答