Как я могу использовать переменную инициализации for loop в качестве заполнителя в C?

Вот код моего простого калькулятора:

#include <stdio.h>

int main(void)
{
    int n1, n2;
    char op;

    do {
        printf("Enter which operation you want to do(+, -, *, /) 
"); op = getch();
    } while(op!='+' && op!='-' && op!='*' && op!='/');

    printf("
");

    switch(op) {
        case '+':
            printf("You chose to do addition.

");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("
");
            printf("%i + %i = %i
", n1, n2, n1+n2);
            break;
        case '-':
            printf("You chose to do subtraction.

");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("
");
            printf("%i - %i = %i
", n1, n2, n1-n2);
            break;
        case '*':
            printf("You chose to do multiplication.

");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("
");
            printf("%i * %i = %i
", n1, n2, n1*n2);
            break;
        case '/':
            printf("You chose to do division.

");
            float dn1, dn2;
            printf("Number 1: "); scanf("%f", &dn1);
            printf("Number 2: "); scanf("%f", &dn2); printf("
");
            printf("%f / %f = %f
", dn1, dn2, dn1/dn2);
            break;
    }
}

Как вы можете видеть, программа берет входные данные от пользователя и делает соответствующие вычисления в соответствии с этим. Он работает хорошо и, как я ожидал, но я беру всего два номера от пользователя. Я хочу, чтобы пользователь мог ввести число столько раз, сколько он хочет.

Я подумал что-то вроде этого, и это показалось мне глупым.

for(int i=1; i<10; i++) {
    printf("Enter number %i: ", i); scanf("%i", &{i}n);
}

Я попытался использовать переменную инициализации цикла для создания новых переменных столько, сколько хочет пользователь.

У меня немного опыт работы с Javascript и Python , и я помню, что я мог использовать переменную инициализации в качестве заполнителя.

Всего 3 ответа


Как упомянуто @Some программист-чувак , вы должны использовать массивы для этого. Вы можете использовать статические или динамические массивы. Статический подход таков:

int arr[ARRAY_LENGTH];
for (int i = 0, i < ARRAY_LENGHT; i++) {
    scanf("%i", &arr[i]);
}

Но если вы хотите анонимное количество ввода, решение является динамическим методом.

int array_length;
int *arr;

printf("Enter the array lenght: ");
scanf("%d", &array_length);

arr = (int *)malloc(array_length * sizeof(int));

for (int i = 0; i < array_length; i++) {
    scanf("%i", &arr[i]);
}

Вы можете использовать массив переменной длины (доступный с C99) и сделать это:

Сначала определите массив:

int Arr[N];

Затем прочитайте его в каждом случае:

printf("How many numbers you want to add?");
scanf("%i", &N);

for(int i=0; i<N; i++) { //index goes from 0 to N-1
    printf("Enter number %i: ", i); scanf("%i", &Arr[i]);
    printf("
");
}

Не забудьте проверить возвращаемое значение scanf чтобы убедиться, что вы смогли правильно прочитать данные.

Поскольку вы знаете, сколько элементов массива вы прочитали (в зависимости от значения N ), вы можете выполнить арифметическую операцию соответствующим образом.

Также обратите внимание, что getch является нестандартной функцией, вместо этого используйте стандартный getchar


Общим решением является определение специального символа op для выхода пользователя (общий выбор - q , который означает «quit») и завершает весь код бесконечным циклом ( while(1) ). Мы выйдем из этого цикла, когда пользователь войдет в q . Таким образом, пользователь имеет полный контроль, сколько раз повторять вычисления (это не ограничивается 10 раз или любым другим числом ...).

Вот пример того, как выглядит ваш код:

// ...
while (1)
{
    // notice the slight changes:
    do {
        printf("Enter which operation you want to do(+, -, *, /). Enter 'q' to quit.
");
        op = getch();
    } while(op!='+' && op!='-' && op!='*' && op!='/' && op != 'q');

    if(op == 'q')
    {
        printf("Exiting...
");
        break;
    }

    // here comes the original code
}

EDIT : Я просто понял, что я не уверен, отвечает ли это на вопрос, заданный в вопросе. Если смысл заключался в том, чтобы добавить (или вычитать и т. Д.) Более двух чисел, чем это не решит проблему (и здесь есть много ответов, которые обеспечивают хорошее решение для этой проблемы).


Есть идеи?

10000