我已经看过一些例子并尝试做某事,但现在我被卡住了。
工作代码是
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),但是我想将一个变量分配给质量变量,但在这种情况下,循环不起作用。我该怎么办?
答案 0 :(得分: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
中的元素数量。
答案 1 :(得分:0)
您将能够使用以下代码有效地模拟当前循环(但具有动态长度):
while (qualities != NULL){
if(k<sizeOfYouArray)
strcpy(quality[k], qualities);
qualities = strtok (NULL, "\n");
k++;
}
基本上,不是检查k
的每个单独值并相应地采取行动,而是应该继续调用strcpy
,直到k
大于sizeOfYourArray
(类似于如果sizeOfYourArray
设置为5 strcopy
将不再被调用,那么当前代码将如何操作。
从长远来看,这对于您的程序来说可能不是最有效或最有效的解决方案(如果我正确理解您的代码,for
循环可能会更好地运行),但这将是所需的最低更改。< / p>