Я написал программу для получения входных аргументов из командной строки и создания базового калькулятора на 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;
}
Который компилируется нормально, так как компилятор не показывает никаких ошибок. Однако я получаю эту ошибку на терминале zsh при запуске, когда я предоставляю 3 аргумента, например:
zsh: segmentation fault ./calc 1 + 3
Я предполагаю, что это может что-то сделать с моей функцией CheckOperands? Любые советы будут оценены.
argv != 3
проще, чемargc > 3 || argc < 3
, не так ли? - person Jabberwocky   schedule 16.11.2020argc[n]
, где n > 1. ТакжеCheckArgumentCount
просто выводит сообщение об ошибке, но в этом случае вы не прерываете работу. - person Jabberwocky   schedule 16.11.2020