3

検索機能を試してみましたが、コンマ/スペースで区切られたファイルの読み取りに関する質問しか見つかりませんでした。

ただし、私の質問は、通常、これにどのようにアプローチするかです。{1, 2, 3, 4} のような値のリスト/配列/... があり、それらを区切り記号で出力したいとします。

最も単純なバージョンは次のようになります。

#include <stdio.h>

int main(void)
{
     char list[] = {1, 2, 3, 4};
     unsigned int i;

     for (i = 0; i < 4; ++i)
     printf("%d, ", list[i]);

     return 0;
}

明らかに「1、2、3、4、」と出力されます。私が抱えている問題は、最後のコンマとスペース文字です。

今私はできる:

#include <stdio.h>

int main(void)
{
    char list[] = {1, 2, 3, 4};
    unsigned int i;

    for (i = 0; i < 4; ++i)
    {
        printf("%d", list[i]);
        if (i < 3)
            printf(", ");
    }

    return 0;
}

しかし、それは最善の方法とは思えません。誰かが私を正しい方向に向けることができますか? ありがとう

PS: いいえ、通常は値をハードコーディングしませ
ん PPS: いいえ、.csv ファイルを書き込もうとしているわけではありません ;)

4

7 に答える 7

11

このための私の標準的なテクニックは次のとおりです。

const char *pad = "";
for (int i = 0; i < n; i++)
{
    printf("%s%d", pad, list[i]);
    pad = ", ";
}

場合によっては、padの初期値は、空白、コロン空白、またはコンテキストで機能するその他のものです。

于 2010-10-14T18:31:08.877 に答える
4

私はこのイディオムを使用します:

assert(n > 0);
printf("%d", list[0]);
for (i = 1; i < n; ++i)
     printf(", %d", list[i]);

その 1 つの欠点は、単純なループのように、n == 0 に対して適切にスケーリングされないことです。または、n == 0 に対する保護を追加できます。

if (n > 0)
    printf("%d", list[0]);
for (i = 1; i < n; ++i)
     printf(", %d", list[i]);
于 2010-10-14T18:12:36.320 に答える
2

K&R2の条件演算子を使用してこの形式を選択しました。

for (i = 0; i < n; i++)
    printf("%d%s", list[i], i+1 < n ? ", " : "\n");
于 2010-10-14T20:13:10.697 に答える
1

すでに受け入れられている答えがあると思っても、誰も私の好みに明白な答えを持っていません:

#include <stdio.h>
int main(void) {
    unsigned list[] = {1, 2, 3, 4};
    unsigned const n = 4;
    if (n) for (unsigned i = 0; ; ++i) {
        printf("%d", list[i]);
        if (i >= n) break;
        printf(", ");
    }
    printf("\n");
    return 0;
}
于 2010-10-14T20:35:42.853 に答える
0

私たちがそれに取り組んでいる間、なぜ別のバージョンにしないのですか. これが私が通常行うことです

for (i=0;i<n;++i)
{
  if (i) printf(", ");
  printf("%d",list[i]);
}
于 2010-10-14T21:04:44.177 に答える
0

Michal Trybus のバージョンまたはその逆を使用する

for (i = 0; i < (n - 1); ++i) 
{
     printf("%d, ", list[i]);
}
printf("%d", list[n - 1]);
于 2010-10-14T18:16:51.633 に答える
0
for ( printf("%d",list[i=0]) ; i < n ; printf(", %d", list[++i]) ) ;
于 2010-10-14T19:11:25.510 に答える