【发布时间】:2014-12-02 01:30:03
【问题描述】:
我正在尝试从命令行获取两个参数,一个 char 和一个 x 长度的 1 和 0 的 int 字符串。我想检查它是否只有 5 个 1 和 0,如果是,我会将它们放入一个数组中。如果超过 5,则为 10,如 10011 10110;在这种情况下,我想将输入解析为两个不同的数组。第一个数字到 A,第二个到 B,依此类推,直到我有两个数组,例如 a = 10101,b = 01110。
我怎样才能做到这一点?我已经尝试了 put(c) until EOF while 循环,但似乎无法从中得到任何东西。下面是我的整个程序,它最终会将数组放入 LLL。
#include <stdio.h>
#include <stdlib.h>
struct nodeA {
int dork;
struct nodeA * next;
};
typedef struct nodeA d1;
struct nodeB {
int dork;
struct nodeB * next;
};
typedef struct nodeB d2;
struct mathOp {
char operation;
struct mathOp * next;
};
typedef struct mathOp dorkOp;
int main(int argc, char * argv[]) {
char a;
int b;
d1 * curr = NULL, * head = NULL;
dorkOp * curr3 = NULL, * head3 = NULL;
int i = 0;
int aA[8] = {0};
int aB[8] = {0};
int tempA, tempB;
if (argc != 3) {
printf("Program takes <char> <int>\n");
exit(-1);
}
a = atoi (argv[1]);
b = atoi (argv[2]);
printf("Test call a = %c, b = %d \n", a, b);
tempA = b;
tempB = b;
for (i = 0; i < 1; i++) {
curr3 = (dorkOp *)malloc(sizeof(dorkOp));
curr3->operation = a;
curr3->next = head3;
head = curr;
}
while (curr3) {
printf("%c\n", curr3->operation);
curr3 = curr3->next;
}
for (i = 0; i < 1; i++) {
curr = (d1 *)malloc(sizeof(d1));
curr->dork = tempA;
curr->next = head;
head = curr;
}
while (curr) {
printf("%d\n", curr->dork);
curr = curr->next;
}
return 0;
}
【问题讨论】:
-
您的大部分代码似乎与您的问题无关。只需检查
argv[1][0]、argv[1][1]等,检查它们是否等于'1'或'0',如果是,请将它们复制到您的数组中。 -
我看不到您如何将输入 10011 10110 转换为两个值 a = 10101, b = 01110。到目前为止,您的问题还没有被完全描述(充其量 - 最坏的情况是完全难以理解)。正如 Paul Griffiths 所指出的,大部分代码与您的问题无关;不需要结构类型来解决将转换后的参数复制到一个或多个数组的问题。我认为你应该暂时删除这个问题,弄清楚如何用两个样本输入(一个短,一个长)、相应的输出以及如何获得输出的解释来询问它。然后取消删除。
-
@JonathanLeffler:我相信转换逻辑是
a[]最终将由input[0]、input[2]、input[4]等组成,而b[]最终将由input[1]、input[3]等。 -
@PaulGriffiths:好的——如果我们将 a = 10101 视为类似以下内容的简写:
a[] = { 1, 0, 1, 0, 1 };(这是实现的结果,而不是您实现它的方式)。我仍然不清楚程序将如何被调用:./a.out X "10011 10110",或者什么。并且长度是严格的 5 还是 11(或者是省略了空格,所以是 5 或 10)?当输入错误时程序应该怎么做(比如X作为字符,被atoi()转换成int)?但是,在一定范围内,你说的话是有道理的。 -
@JonathanLeffler:同意,我对
putc(c)的尝试有点迷惑。