-1

これは、std 入力を取得し、入力数が 72 未満の場合に改行文字で終わる 72 文字を表示するプログラムです。終端の null 文字を追加する必要があります。バッファを出力すると、ジャンク値が得られます。ここで何が問題なのですか

int main()  {
int buffer[ MAX_CHAR ];
int count = 0, ch = 0, i = 0;

while( (ch = getchar() != '@') ) {
    // Buffer used to collect the i/p characters from the std i/p
    buffer[count++] = ch;
    if( MAX_CHAR - 1 == count ) {

        buffer[ MAX_CHAR + 1 ] = '\n';
        for(i = 0; i < MAX_CHAR; i++)
            printf("%c", buffer[i]);
        count  = 0;
        buffer[ MAX_CHAR ] = 0;
        }
    }
    //If the input character is less than 72, then append the rest with spaces
    if( count != MAX_CHAR - 1)  {

        for(i = count; i < MAX_CHAR - 1; i++)
            buffer[ count ] = ' ';
        buffer[ MAX_CHAR ] = '\n';
        for(i = 0; i < MAX_CHAR; i++)
            printf("%c", buffer[i]);
        }
   }
4

1 に答える 1

3

あなたが持っている:

while( (ch = getchar() != '@') ) {

これは次のように解析されます。

while( (ch = (getchar() != '@')) ) {

したがってch、値は0または1になります。必要なものは次のとおりです。

while( ((ch = getchar()) != '@') ) {

さらに、バッファの末尾を超えて書き込むと、いくつかの場所で未定義の動作が発生します。

int buffer[ MAX_CHAR ];
...
buffer[ MAX_CHAR + 1 ] = '\n';
...
buffer[ MAX_CHAR ] = 0;
于 2013-07-15T17:25:26.433 に答える