【发布时间】:2020-11-16 20:55:08
【问题描述】:
我编写了一个程序来从命令行获取输入参数并用 C 语言创建一个基本的计算器。 代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void CheckArgumentCount(int argc);
int CheckOperands(char *argv[]);
long Calculate(long nr1, long nr2, char operation);
int main(int argc, char *argv[])
{
long nr1 = CheckOperands(&argv[1]);
long nr2 = CheckOperands(&argv[3]);
int result;
CheckArgumentCount(argc);
result = Calculate(nr1, nr2, *argv[2]);
printf("Result: %d", result);
return 0;
}
void CheckArgumentCount(int argc)
{
if (argc > 3 || argc < 3)
{
puts("Wrong number of arguments to perform the calculation.\n");
}
}
int CheckOperands(char *argv[])
{
int i = 1;
while (*argv[i] != '\0')
{
if (*argv[i] < '0' || *argv[i] > '9')
{
return *argv[i];
}
argv++;
}
return atoi(argv[i]);
}
long Calculate(long nr1, long nr2, char operation)
{
long result = 0;
switch (operation)
{
case '+':
result = nr1 + nr2;
break;
case '-':
result = nr1 - nr2;
break;
case '*':
result = nr1 * nr2;
break;
case '/':
if (nr2 == 0)
{
puts("Error! Divion by zero.");
}
else
{
result = nr1 / nr2;
}
break;
default:
puts("Operator invalid.");
break;
}
return result;
}
编译正常,因为编译器没有显示任何错误。 但是,当我提供 3 个参数时,我在运行 zsh 终端时收到此错误,例如:
zsh: segmentation fault ./calc 1 + 3
我认为它可能与我的 CheckOperands 函数有关?任何建议将不胜感激。
【问题讨论】:
-
OT:
argv != 3比argc > 3 || argc < 3简单,不是吗? -
您需要检查参数计数 before 取消引用任何
argc[n]其中 n > 1。此外,CheckArgumentCount只会打印一条错误消息,但您不会中止那个案子。
标签: c calculator argv argc