【问题标题】:Conditioned input with arrays带数组的条件输入
【发布时间】:2020-11-23 17:45:41
【问题描述】:

我有这段代码,我希望它反复要求用户输入一个数字,并希望每个数字都存储在一个数组中,直到用户输入 0,然后打印出结果,但它似乎不起作用

我还想补充一点,我并不想使用指针。这个赋值需要我们在没有指针的情况下完成。

这是我的代码:

printf("Enter your commands\n");
int input;

int commandArray[10];

    for (size_t i =0; i < 10; i++)
    {
        if (scanf("%d", &input) != 0)
        {
            break;
        }
        else
        {
            scanf("%d", &input);
            commandArray[i] = input;
        }
    }


for(size_t i = 0; i < 10; i++)
{
    printf("%d\n", commandArray[i]);
}

这是我想要的输出

(用户输入): 1 4 5 3 6 0(停止向数组中添加元素)

(程序显示数组中的元素):

1 4 5 3 6

【问题讨论】:

  • if (scanf("%d", &amp;input) != 0) - 我不认为它正在做你打算做的事情。请仔细阅读scanf的返回值,它不是输入的值。
  • 你想要if( scanf(...) != 1 )if( input == 0 )
  • 是的,你是对的,我的错;现在修复了它,但它仍然不起作用,即使在我达到 0 之后,它仍然让我输入数字。@WilliamPursell
  • 因为您不检查输入是否为零。
  • 在您的循环中,您调用scanf 并读取一个值。如果读取成功,则丢弃该值并读取另一个值。您可能不打算丢弃所有其他输入。

标签: arrays c loops


【解决方案1】:

scanf 不返回读取的值,它只是将其保存在输入变量中。

此外,当您在最后打印数组时,即使用户添加的数字少于 10 个,您也总是会打印完整的数组,您应该将数组的大小保存在不同的变量中。

最后你应该在输入等于 0 时停止循环,而不是当它不同时。

这是工作代码

printf("Enter your commands\n");
int input;

int commandArray[10];
int size = 0;

    for (size_t i =0; i < 10; i++)
    {
        
        size = i;
        scanf("%d", &input);
        
        if (input == 0)
        {
            break;
        }
        else
        {
            commandArray[i] = input;
        }
    }


for(size_t i = 0; i < size; i++)
{
    printf("%d\n", commandArray[i]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多