我在使用atoi(s)函数时遇到了一些问题。我试图将命令行参数转换为整数,但从a to I函数接收到的整数的行为有些奇怪。我已经检查了保存转换的变量,它们保存了正确的整数,但是当它们在我的程序中运行时,它们并没有正常工作。程序接受三个参数:程序本身、函数号(1-3)和任意整数。例如,命令行指令看起来像lab4p2 3 10。
功能:

#include <stdio.h>
#include <stdlib.h>


//---------------------------------------------------------------------------
// Functions

// Sumation function adds all integers from 1 to the value.
int sumation(int x)
{
  int counter = 1;
  int value;
  while (counter < (x+1))
    {
      value += counter;
      counter++;
    }
  return value;
}

// Negation function returns the negation of the given value.
int negation(int x)
{
  int negator, value;

  negator = (x*2);
  value = (x - negator);
  return value;
}

// Square function returns the square of the input value.
int square(int x)
{
  int value;
  value = (x*x);
  return value;
}

//---------------------------------------------------------------------------

主要:
main(int argc, char *argv[])
{

  int inputval, functionval, value;
  double doubleval;

  functionval = atoi(argv[1]);

  inputval = atoi(argv[2]);
  doubleval = atof(argv[2]);

  printf("%i", functionval);
  printf("%i", inputval);

  if(argc != 3)
    {
      printf("%s", "Invalid amount of arguments! 3 expected. \n");
    }
  else if ((functionval < 1)||(functionval > 3))
    {
      printf("%s", "Invalid function value. Expected values: 1-3 \n");
    }
  else if (inputval != doubleval)
    {
      printf("%s", "Invalid value! Integer expected. \n");
    }
  else if (functionval = 1)
    {
      value = sumation(inputval);

      printf("%s", "The sum from 1 to the input value = ");
      printf("%d", value);
    }
  else if (functionval = 2)
    {
      value = negation(inputval);

      printf("%s", "%d", "The negation of the input value = ", value);
    }
  else if (functionval = 3)
    {
      value = square(inputval);

      printf("%s", "%d", "The square of the input value = ", value);
    }
  else
    {
      printf("%s", "Something is wrong!");
    }

}

所有的错误检查都能正常工作,但函数2和函数3永远无法访问(尽管有输入),函数1显示错误的答案。有人知道问题是什么吗?
谢谢,
马特

最佳答案

functionval = 1    assignment

functionval == 1   comparison

顺便说一下,当你得到doubleval的时候也会有一个拼写错误
现在我看到再次使用argv[2]和不同的转换函数是经过深思熟虑的,而不是argv[3]的拼写错误,我建议您如果关心转换错误,可以使用如下方法:
errno = 0;
char* endptr;
long value = strtol(argv[2], &endptr, 10);
if (errno == ERANGE) {
  // Value was too big or too negative
} else if (endptr == argv[2] || errno == EINVAL) {
  // Not a number
} else if (endptr[0] != '\0') {
  // trailing characters.
}
// Value is OK.

如果你经常使用它,它值得包装成更容易调用的东西。

关于c - atoi(s)麻烦,main与参数麻烦。 C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12774169/

10-10 03:53