gpt4 book ai didi

c - 函数无法运行(我的第一个 C 项目)

转载 作者:行者123 更新时间:2023-11-30 16:12:45 24 4
gpt4 key购买 nike

您好,我是一名刚刚接触 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.exedecimaldecimal12 时,结果只是“系统退出”。我期望它会打印出十进制(因为我正在执行十进制到十进制)

#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.运行这个并查看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.输入错误

将所有 char ** 更改为 char *

3.输入错误

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

更改为

int p = 1;

char* r = argv[2];

关于c - 函数无法运行(我的第一个 C 项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com