1

我看过一些例子并试图做一些事情,但现在我被卡住了。

工作代码是

    char quality[5][10];
    char * qualities;
    qualities = strtok (message, "\n");
    int k = 0;
    while (qualities != NULL){
        if (k == 0) {
            strcpy(quality[0], qualities);
        }
        else if ( k == 1) {
            strcpy(quality[1], qualities);
        }
        else if ( k == 2) {
            strcpy(quality[2], qualities);
        }
        else if ( k == 3) {
            strcpy(quality[3], qualities);
        }
        else if ( k == 4) {
            strcpy(quality[4], qualities);
        }           
        qualities = strtok (NULL, "\n");
        k++;
    }

然而,这适用于固定长度(在这种情况下只有 5),但是我想将一个变量分配给质量变量,但在这种情况下,while 循环将不起作用。我该怎么办?

4

2 回答 2

2

替换此块

if (k == 0) {
        strcpy(quality[0], qualities);
} else if ( k == 1) {
    strcpy(quality[1], qualities);
} else if ( k == 2) {
    strcpy(quality[2], qualities);
} else if ( k == 3) {
    strcpy(quality[3], qualities);
} else if ( k == 4) {
    strcpy(quality[4], qualities);
}
qualities = strtok (NULL, "\n");
k++;

用这两行:

strcpy(quality[k++], qualities);
qualities = strtok (NULL, "\n");

这是一个等价的代码,但它适用于任意数量的项目,最多为quality数组中的元素数量。

由于元素的数量是固定的,你应该改变

while (qualities != NULL)

while (k < N && qualities != NULL)

其中N是 中的元素个数qualities

于 2012-12-10T03:55:13.970 回答
0

您将能够使用以下代码有效地模仿当前循环(但具有动态长度):

while (qualities != NULL){
    if(k<sizeOfYouArray)
        strcpy(quality[k], qualities);           
    qualities = strtok (NULL, "\n");
    k++;
}

本质上,不是检查每个单独的值k并采取相应的行动,循环应该继续调用strcpy直到k大于sizeOfYourArray(类似于如果sizeOfYourArray设置为 5-strcopy将不再调用当前代码的行为)。

从长远来看,这可能不是您的程序最有效或最有效的解决方案(for如果我正确理解您的代码,循环可能会更好地运行),但这将是所需的最低限度的更改。

于 2012-12-10T03:54:41.320 回答