是否可以在C中使用for循环来确定用户输入的值中哪一个值最小而不使用数组?

是否可以在C中使用for循环来确定用户输入的值中哪一个值最小而不使用数组?,c,for-loop,integer,C,For Loop,Integer,我正在编写一个C程序,在某一点上,要求用户输入10个正整数,然后打印出这10个整数中最小的一个。程序的这一部分不能包括数组的使用,必须包括for循环的使用。我被卡住了,因为据我所知,在C中不可能动态更改变量名。以下是我迄今为止所做的: int main() { int value1, value2, value3, value4, value5, value6, value7, value8, value9, value10; printf("Enter 10

我正在编写一个C程序,在某一点上,要求用户输入10个正整数,然后打印出这10个整数中最小的一个。程序的这一部分不能包括数组的使用,必须包括for循环的使用。我被卡住了,因为据我所知,在C中不可能动态更改变量名。以下是我迄今为止所做的:

int main()
{
    int value1, value2, value3, value4, value5, value6, value7, value8, value9, value10;
    
    printf("Enter 10 positive integers.\n");
    scanf("%i %i %i %i %i %i %i %i %i %i", &value1, &value2, &value3, &value4, &value5, &value6, &value7, &value8, &value9, &value10);

    return 0;
}

我是C语言的新手,因此,如果您对其余代码有任何帮助,我将不胜感激。

不是以您编写的方式

如果您一个接一个地获得输入,那么您可以跟踪到目前为止看到的最小值。

简单示例

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    int minimum;
    printf("Input 10 space separated integers\n");
    if (scanf("%d", &minimum) != 1) exit(EXIT_FAILURE);
    for (int j = 0; j < 9; j++) {
        int value;
        if (scanf("%d", &value) != 1) exit(EXIT_FAILURE);
        if (value < minimum) minimum = value;
    }
    printf("minimum value entered was %d.\n", minimum);
}

是的,这是可能的,利用C中数组和指向数组的指针之间几乎没有区别的事实。基本上,你得到指向第一个变量的指针,然后遍历它们,就像它是一个数组一样。唯一需要注意的是确保变量的已知对齐。要实现这一点,必须将它们放在结构中

我不确定您的要求是只避免声明数组还是完全避免数组语法,因此我在下面的示例中避免了数组语法:

#include <stdio.h>

int main()
{
    struct {
        int v1, v2, v3, v4, v5, v6, v7, v8, v9, v10;
    } inputs;
    
    
    printf("Enter 10 positive integers.\n");
    scanf("%i %i %i %i %i %i %i %i %i %i", &inputs.v1, &inputs.v2, &inputs.v3, &inputs.v4, &inputs.v5, &inputs.v6, &inputs.v7, &inputs.v8, &inputs.v9, &inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int *ptr = &inputs.v1;      // get pointer to first input
    int smallest = *ptr;        // initialize our result before calculation
    ++ptr;                      // increment pointer to second element
    for (int i = 1; i < numItems; ++i)  // we start from the second element so we start start counting from 1
    {
        // Smallest element calculation
        if (*ptr < smallest)
            smallest = *ptr;

        ++ptr;
    }

    printf("Smallest number: %i.\n", smallest);

    return 0;
}
下面是一个外观更好的版本,使用数组语法,但仍然不使用数组:

#include <stdio.h>

int main()
{
    struct {
        int v1, v2, v3, v4, v5, v6, v7, v8, v9, v10;
    } inputs;


    printf("Enter 10 positive integers.\n");
    scanf("%i %i %i %i %i %i %i %i %i %i", &inputs.v1, &inputs.v2, &inputs.v3, &inputs.v4, &inputs.v5, &inputs.v6, &inputs.v7, &inputs.v8, &inputs.v9, &inputs.v10);

    const int numItems = 10;    // how many inputs do we have
    int* ptr = &inputs.v1;      // get pointer to first input
    int smallest = ptr[0];      // initialize our result before calculation
    for (int i = 1; i < numItems; ++i)  // we start from the second element so we start start counting from 1
    {
        // Smallest element calculation
        if (ptr[i] < smallest)
            smallest = ptr[i];
    }

    printf("Smallest number: %i.\n", smallest);

    return 0;
}

尝试在循环中获取元素,如int min=1L