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++;

これらの2行で:

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呼び出し続ける必要があります (が 5 に設定されている場合に現在のコードが動作するのと同様に、呼び出されなくなります)。strcpyksizeOfYourArraysizeOfYourArraystrcopy

これは、長期的にはプログラムにとって最も効果的または効率的な解決策ではないかもしれません (forコードを正しく理解していれば、ループはより適切に機能する可能性があります) が、最低限必要な変更です。

于 2012-12-10T03:54:41.320 に答える