Функции не работают (мой первый C-проект) - PullRequest
0 голосов
/ 06 октября 2019

Здравствуйте, я студент колледжа, который плохо знаком с C, и это мой первый проект, над которым я буду работать. Вот описание:

Напишите программу, которая принимает n аргументов, но требует как минимум 3 аргумента.

Первый аргумент должен быть базой, в которой вы вводите числа. Вторые аргументы должны быть основой, которую вы хотите преобразовать. Третий, четвертый и вплоть до n - это последовательность чисел, которые необходимо преобразовать

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

Основы для покрытия: я хочу, чтобы вы могли преобразовывать числа туда и обратноиз десятичного числа, шестнадцатеричного и двоичного.

Структура вашего кода:

Я бы хотел, чтобы вы написали 9 без побочных эффектов (то есть они не меняют свои входные) функции для преобразованиямежду базами. Это означает, что вам нужно будет использовать malloc для возврата двумерного массива результата:

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 decimal decimal 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 голосов
/ 07 октября 2019

У вас есть массовая ошибка в вашем коде, почти весь ваш код

1. запустите это и посмотрите, что такое argv [0]

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



int main(int argc, char *argv[]) {
    printf("%d\n",argc);
    printf("%s\n",argv[0]);
    return 0;
}

2. тип ошибки

все ваши символы ** изменяются на символы *

ошибка типа 3. 1010 * int p = 1, r = argv [2]; изменяется на int p = 1; char * r = argv [2];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...