这是我的简单计算器的代码:
#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
上有一点经验,我记得我可以将初始化变量用作占位符。
答案 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]);
}