函数不起作用(我的第一个C项目)

时间:2019-10-06 20:55:24

标签: c binary hex decimal

您好,我是一名C语言新手,这是我的第一个工作项目。这是说明:

编写一个包含n个参数但至少需要3个参数的程序。

第一个参数应为您提供数字的基础。 第二个参数应该是要转换为的基础。 一直到n的第三个,第四个,一直是需要转换的数字序列

 ./Aassign1 decimal binary 1 2 3 4 5 6 7 8 9 10

涵盖的基础: 我希望您能够从十进制,十六进制和二进制来回转换数字。

代码的结构:

我希望您免费编写9个副作用(表示它们不会更改其输入)以在基数之间进行转换。这意味着您将需要使用malloc返回结果的2D数组:

char ** decimalToDecimal (...)
char ** decimalToBinary (...)
char ** decimalToHex (...)

char ** binaryToDecimal (...)
char ** binaryToBinary (...)
char ** binaryToHex (...)
char ** hexToDecimal (...)
char ** hexToBinary (...)
char ** hexToHex (...)
void seekUserInput (...)
*** inputValidation (...)
int main (...)

基于前两个参数,您应该传递其余两个参数,然后返回另一个带有结果的新数组,然后可以迭代该数组。

请记住,如果数组在堆栈上分配,则不能传递数组,因此请确保将它们分配到堆上。别忘了释放您的记忆!


这是我的代码。该功能不起作用。我试图打印第三个参数值,但它也无法正常工作。我不知道用户输入是否正在该函数中。请给我一些建议。我将其编译为一个exe,然后使用cmd运行该程序,例如p1.exe十进制十进制12,它看起来像比较字符串,如十进制,二进制,十六进制都可以,但是argv [2]似乎可以不进入功能。当我运行p1.exe十进制十进制12时,它只显示了“系统出口”。我希望它会打印出十进制数(因为我正在将十进制转换为十进制)

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

char ** result;


char ** decimalToDecimal (int argc, char* argv[])
{
    printf("%d", argv[2]);
}

char ** decimalToBinary (int argc, char* argv[])
{
    int p = 1, r = argv[2];

    char *result = (char*)malloc(sizeof(char) * 100);

    itoa(r, result, 2);

    return result;
}

char ** decimalToHex (int argc, char* argv[])
{

}

char ** binaryToDecimal(int argc, char* argv[])
{
    int p = 1, r = argv[2];

    char *dec = (char*)malloc(sizeof(char) * 100);

    itoa(r, dec, 10);

    return dec;
}

char ** binaryToBinary (int argc, char* argv[]) {

}

char ** binaryToHex(int argc, char* argv[])

{
    int p = 1, r = argv[2];

    char *hex = (char*)malloc(sizeof(char) * 100);

    itoa(r, hex, 16);

    return hex;
}

char ** hexToDecimal (int argc, char* argv[]) {

}
char ** hexToBinary (int argc, char* argv[]) {

}
char ** hexToHex (int argc, char* argv[]) {

}

// Redirect to corresponding function
void seekUserInput(int argc, char* argv[]) {
  if (strcmp(argv[0], "binary") && strcmp(argv[1], "decimal")) result = binaryToDecimal(argc, argv);
  else if (strcmp(argv[0], "binary") && strcmp(argv[1], "binary")) result = binaryToBinary(argc, argv);
  else if (strcmp(argv[0], "binary") && strcmp(argv[1], "hex")) result = binaryToHex(argc, argv);
  else if (strcmp(argv[0], "decimal") && strcmp(argv[1], "decimal")) result = decimalToDecimal(argc, argv);
  else if (strcmp(argv[0], "decimal") && strcmp(argv[1], "binary")) result = decimalToBinary(argc, argv);
  else if (strcmp(argv[0], "decimal") && strcmp(argv[1], "hex")) result = decimalToHex(argc, argv);
  else if (strcmp(argv[0], "hex") && strcmp(argv[1], "decimal")) result = hexToDecimal(argc, argv);
  else if (strcmp(argv[0], "hex") && strcmp(argv[1], "binary")) result = hexToBinary(argc, argv);
  else if (strcmp(argv[0], "hex") && strcmp(argv[1], "hex")) result = hexToHex(argc, argv);

  return result;
}

// Check if user input contains letters
bool inputValidation(int argc, char *argv[]) {
  if( strcmp(argv[0], "binary") || strcmp(argv[0], "decimal")) {
    for (int i=2;i<argc;i+=1)  {
      char *pos = argv[i];
      while (*pos != '\0')  {
        if ( !isdigit(*(pos++)) ) return false;
      }
    }
    return true;
  }
  return true;
}

int main(int argc, char *argv[])
{
    if (argc <= 3) {
        printf("ERROR: You have to insert at least 3 argumetns.");
        system("pause");
        return 0;
    }
  result = (char**) malloc(argc*4);
    if ( inputValidation(argc, argv) )
    seekUserInput(argc, argv);


  printf("%s\n", "System exit.");
    system("pause");
    return 0;

}

1 个答案:

答案 0 :(得分:0)

几乎所有代码中都存在大量错误

1。运行它,看看什么是argv [0]

n = int(input())
student_marks = {}
for i in range(n):
    name, *line = input().split()
    scores = list(map(float, line))

    student_marks[name] = scores
    print(scores)
    print(student_marks)
query_name = input()
avg=0
if query_name == name:
    print(query_name)
    avg=sum(scores)/3
print(avg)

2.type错误

所有字符**更改为字符*

3.type错误

int p = 1,r = argv [2];

更改为

int p = 1;

char * r = argv [2];