Как я могу использовать переменную инициализации цикла for в качестве заполнителя в C? - PullRequest
0 голосов
/ 05 ноября 2018

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

#include <stdio.h>

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

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

    printf("\n");

    switch(op) {
        case '+':
            printf("You chose to do addition.\n\n");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("\n");
            printf("%i + %i = %i\n", n1, n2, n1+n2);
            break;
        case '-':
            printf("You chose to do subtraction.\n\n");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("\n");
            printf("%i - %i = %i\n", n1, n2, n1-n2);
            break;
        case '*':
            printf("You chose to do multiplication.\n\n");
            printf("Number 1: "); scanf("%i", &n1);
            printf("Number 2: "); scanf("%i", &n2); printf("\n");
            printf("%i * %i = %i\n", n1, n2, n1*n2);
            break;
        case '/':
            printf("You chose to do division.\n\n");
            float dn1, dn2;
            printf("Number 1: "); scanf("%f", &dn1);
            printf("Number 2: "); scanf("%f", &dn2); printf("\n");
            printf("%f / %f = %f\n", dn1, dn2, dn1/dn2);
            break;
    }
}

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

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

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

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

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

    // here comes the original code
}

РЕДАКТИРОВАТЬ : Я только что понял, что я не уверен, отвечает ли это на то, что было задано в вопросе. Если смысл состоял в том, чтобы разрешить сложение (или вычитание и т. Д.) Более 2 чисел, это не решит проблему (и здесь есть много ответов, которые обеспечивают хорошее решение этой проблемы).

0 голосов
/ 05 ноября 2018

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

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]);
}
0 голосов
/ 05 ноября 2018

Вы можете использовать массив переменной длины (доступно с 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("\n");
}

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...