4

これは非常に些細な質問ですが、正しい出力が得られない理由がわかりません。これが私がやろうとしていることです:

char sendBuffer[1000];
int count=0:
while(count<10)
{
    sendBuffer[0]=count;
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';
    printf(%s,sendBuffer);
    count=count+1;
}

出力では、最初のインデックスを除くすべてのバッファーが正しく出力されます。バッファの先頭に 1,2,3 などを出力したいのですが、うまくいきません。助けてください

4

7 に答える 7

6

その数字を文字に変換する必要があります。それを行うための安価な方法は次のとおりです。

sendBuffer[0] = '0' + count;

とにかく9より大きい整数を表示する方法はありますか

それが必要な場合は、より精巧なスキームに移行する必要があります。たとえば、整数 42 を文字列 "42" に変換したい場合は、次のように言えます。

#define ENOUGH ((CHAR_BIT * sizeof(int) - 1) / 3 + 2)

char str[ENOUGH];
snprint(str, sizeof str, "%d", 42);

のクレジットはcafENOUGHに送られます。

于 2013-03-09T08:33:49.623 に答える
2

変化する

sendBuffer[0]=count;

sendBuffer[0]='0' + count;

つまり、整数0...9を文字「0」...「9」に変換します

また、引用符を追加します。printf("%s",sendBuffer);

于 2013-03-09T08:35:12.357 に答える
2

printf(%s,sendBuffer);する必要がありますprintf("%s",sendBuffer);

于 2013-03-09T08:33:31.487 に答える
1

整数値をchar表現に変換するには、文字「0」の値を追加します。

sendBuffer[0]=count + '0';

'0'これは数字の0ではなく、文字であることに注意してください。これは、 ASCII値がどのように機能するかによるものです。リテラル値が0のcharは\0、ヌルターミネータです。数字「0」のリテラル値は48、「1」49などです。

これは、0〜9の数字に対して機能します。もちろん、1つの文字にそれよりも大きい数の文字表現を入れることはできません。

于 2013-03-09T08:38:05.057 に答える
1

質問からの引用:

出力では、最初のインデックスを除くすべてのバッファが正しく出力されます。バッファの先頭に1、2、3などを出力したいのですが、機能しません。助けてください

彼女の問題は、彼女が最初の行の出力を取得しないことだと思います。これは、最初の反復では、カウントが0であるためです。つまり、sendBuffer [0]は0であり、これは「\0」文字です。したがって、文字列は空として扱われます。

于 2013-03-09T08:39:30.393 に答える
1

印刷できない文字である 0 ~ 9 の 10 進数値に対応する ASCII 文字を印刷しようとしています。10 進数の 0 ~ 9 を出力する必要がある場合は、count を「0」の ASCII 10 進数コードである 48 に初期化し、while ブロックの条件を count < 58 に変更します。57 は '9' のアスキー 10 進数コードです。下記参照:

char sendBuffer[1000];
int count=48:
while(count<58)
{
    sendBuffer[0]=count;
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';
    printf(%s,sendBuffer);
    count=count+1;
}
于 2013-03-09T08:45:20.723 に答える
0
char sendBuffer[1000];

// take fixed stuff outside the loop
    sendBuffer[1]='a';
    sendBuffer[2]='b';
    sendBuffer[3]='c';
    sendBuffer[4]='\0';

// it's best not to rely on order of ASCII values

for(char* numbers="0123456789"; *numbers!=0; numbers++){// use for loop for numbers
    sendBuffer[0] = *numbers;

    printf("%s",sendBuffer);
}
于 2013-03-09T09:27:09.163 に答える