gpt4 book ai didi

c - 根据 argc 是偶数还是奇数,将 0 添加到 char* 数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:12 25 4
gpt4 key购买 nike

所以我正在做一个作业,用户只需调用 parent.c 类,如“./parent 1 2 3 4 5 6 7 8”,child.c 类将计算结果的总和。

它的工作原理是像这样在一行中分别读取 2 个数字...“1+2”“3+4”“5+6”“7+8”

我已经成功地做到了这一点,但是当输入最终变得奇数时,我完全碰壁了。当我不断循环子进程时,每 2 个数字将不断相加,但是当循环到达输入末尾并且不再有 2 个数字要添加,而只有一个(奇数情况)时,这就成了一个问题。

因此,如果输入变成诸如...“./parent 1 2 3 4 5 6 7”或“./parent 1 2 3”

它只会平整返回 0。

我的文件将计算偶数,但不会将奇数相加。我想要实现的总体目标是,如果输入达到奇数,就能够添加一个零。我尝试过的一个解决方案是在 while 循环开始时检查数据数组中的值数量是否为奇数,然后将索引递增 1,然后向该索引添加 0。但它仍然没有提供正确的解决方案。

父类.c

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


int main(int argc, char *argv[])
{
int status, workerid, id;
int i = 0;
int loopcount = 0;


char* data[argc];
for(i = 1; i <= argc; i++)
{
data[i] = argv[i];
}

int numberloops = argc / 2;
int index = 0;

while(numberloops > index)
{

loopcount = 0;

for(i = 1; i <= argc; i += 2)
{
loopcount++;

id = fork();

if(id < 0)
{
perror("fork() ERROR.\n");

}
else if(id > 0)
{
workerid = waitpid(id, &status, 0);

status = WEXITSTATUS(status);

//update data array
char* statStr;
statStr = (char*) malloc(16);
snprintf(statStr, sizeof(statStr), "%d", status);
data[loopcount] = statStr;
}
else
{
execlp("./child", "child", data[i], data[i+1], NULL);
}
}

int arrayNum = atoi(data[loopcount]);

// Adds a 0 to the array.

while(loopcount < argc)
{
loopcount++;
data[loopcount] = 0;
}

//change argc (number of values in data array)
if(argc % 2 == 1)
{
argc = (argc + 1) / 2;
}
else
{
argc /= 2;
}

index++;
}

printf("Final Sum: %s.\n\n", data[1]);
}

child .c

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

int main(int argc, char *argv[])
{
int x = atoi(argv[1]);
int y = atoi(argv[2]);

int sum = x + y;

printf("%d + %d = %d Worker PID: %d\n", x, y, sum, getpid());

exit(sum);
}

最佳答案

要解决“奇怪-问题”,一种简单的方法是定义 char * data[argc + 1]; 并初始化它指向的所有元素将相关元素设置为指向 argv 的元素之前的文字 "0"

关于c - 根据 argc 是偶数还是奇数,将 0 添加到 char* 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48535983/

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