c - 在不使用 break 的情况下终止输入为 -1 时的数组输入?

标签 c arrays loops input break

我在循环中使用 scanf 获取长度为 100 的数组的输入。在 20 个数字之后,如果我输入 -1,我希望循环退出,即完成输入并继续程序的其余部分。我正在做这样的事情

for(i=0;i<100;i++)
{
    scanf("%d", &input[i]);
    if(input[i] == -1)
    {
        break;
    }
}

我听说,即使这段代码工作得很好,使用 break 语句也是一种不好的做法。所以我想知道在输入 -1 时结束循环的更有效方法是什么。我试过了

for(i=0;scanf("%d",&input[i])!=-1;i++)

还有

fori(i=0;i<100;i++){
    do
{scanf("%d", &input[i]);
}while(input[i]!=-1
}

这两个都不行

最佳答案

for 循环的第二个表达式是一个自由形式的 bool 表达式。在这种情况下,您可以在那里添加您的条件。但是在这种情况下,它看起来不太好。例如

for(i=0; i < 100 && (i < 1 || input[i - 1] != -1); i++)
{
    scanf("%d", &input[i]);
}

即如果我们已经输入了一个值,请检查该值并且该值必须不等于 -1 才能继续循环

另一种方法是使用合成标志变量:

int loop_again = 1;
for (i = 0; loop_again && i < 100; i++) {
    scanf("%d", &input[i]);
    if(input[i] == -1)
    {
        loop_again = 0;
    }
}

总而言之,这两者看起来比仅仅使用 break 语句来实现它的发明目的要丑陋得多。

请注意,您还应该检查 scanf 本身的返回值!

关于c - 在不使用 break 的情况下终止输入为 -1 时的数组输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47451568/

相关文章:

loops - SPSS 创建一个循环以对多个变量进行多元回归

c - struct task_struct 成员?

c - 需要澄清 C 中的 unsigned char *

检查标准输入中的字母是否为大写

Java:使函数返回正整数而不是负整数

jquery - JQuery 动画的 CPU 使用率较高

c - 如何在 Linux 上构建信号名称数组?

php - Yii:如何从数组中设置 dropDownList 'options'

java - 将数组中的两个 double 相乘时收到 0.0

php - 通过多维数组循环出现问题