Здравствуйте, я студент колледжа, который плохо знаком с 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;
}