2017-03-26 6 views
1

システムコール(readwrite)を使用して入出力を行うCプログラムを作成しようとしています。しかし、私もsscanfを使って変換したい。プログラムは開始値と終了値を入力し、その終了値にカウントします。私はsscanfを使用して変換しようとしています。CシステムコールI/Oとsscanfの実行

int main(int argc, char **argv){             
    char beg[5];                 
    char stop[5];                
    int i, start, end;               

    write(1, "Starting value: ", 16);           
    read(0, beg, 4);                
    sscanf(beg,"%d",&start);              

    write(1, "Ending value: ", 14);            
    read(0, stop, 4);               
    sscanf(stop,"%d",&end);              


    int dif = end - start;              
    if (dif >= 0){                
     for (i = start; i <= end; i++){           
      write(1, &i, sizeof(i));            
     }                  
     write(1, "\n", 1);              
    }                   
    return 0; 
} 

所望の出力:しかし

Starting value: 1 
Ending value: 4 
1 2 3 4 

、countに何も印刷(私はprintf("%d ", i);を使用した場合、それは動作します)

+2

'read(0、beg、4);' begはNULで終了しません。 [あなたの入力を拾い読み] – wildplasser

答えて

1

あなたがこの持っている:

int i; 
write(1, &i, sizeof(i)); 

を私はあなたを推測しますこれは、

と同じだと思います
printf("%d", i); 

しかし、そうではありません!

printf()フォーマット人間が読めるASCIIテキストの引数であるwrite()はそのようなことはありません。代わりに、生のバイトをファイルに直接バイナリで読み取り可能なデータとして書き込みます。

ちょうどprintf()を使用してください。

そして、このためのように:

write(1, "Starting value: ", 16); 

不正なコードです。代わりに:

puts("Starting value: "); 
+0

しかし、全体のポイントはシステムコールを代わりに使用することでした。 – Jakeeln

+0

@ Jakeeln:なぜですか?あなたは学校の仕事をしていて、 'printf()'を使うことは許されていませんか?もしそうなら、あなたはあなたの質問にこれを述べるべきです。 –

+0

いいえ、学校のためではない、私はポストの理由は、特にシステムコールの使用をよりよく理解することを意味した。 – Jakeeln

関連する問題