如何使用for循环的初始化变量作为C中的占位符?

时间:2018-11-05 08:31:58

标签: c for-loop

这是我的简单计算器的代码:

#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循环初始化变量来创建用户想要的新变量。

我在JavascriptPython上有一点经验,我记得我可以将初始化变量用作占位符。

3 个答案:

答案 0 :(得分:2)

您可以使用variable length array(自C99起可用)并执行以下操作:

首先定义数组:

int Arr[N];

然后在每个case语句中阅读它:

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

答案 1 :(得分:2)

常见的解决方案是为用户定义一个特殊的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 :(得分:1)

@Some programmer dude所述,您应该使用数组来执行此操作。您可以使用静态或动态数组。静态方法是这样的:

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]);
}