2011-08-19 9 views
6
import std.stdio; 

void main(){ 

    int n; 
    while(readf("%d", &n)){ 
    if(n == 11) 
     break; 
    writeln(n); 
    } 
} 

最初の繰り返しが実行され、nが出力されますが、その後はreadf()が返されません。readfが期待どおりに動作しないのはなぜですか?

ドキュメントはreadf()を説明するための単一の行を有する。

UINTのREADF(A ...)(CHARで[]形式、引数)。

For­mat­ted read one line from stdin. 

私は間違って何かをするのですか?またはreadf()に何か問題がありますか?標準入力から数値を読み取るだけです。

使用:DMD 2.054 64ビット

答えて

9

私はreadfあなたは明示的にスペースに読み取る必要があるC.でscanfとは異なるスペースを扱うので、readf("%d ", &n)からreadf("%d", &n)を変更すると、それは(たぶん)動作するはずですので、それはだと信じています。

これは仕様によるものです:

はここで機能を実装しアンドレイ、からの引用です。この例は、次のように変更された場合に機能します。

import std.stdio;

void main(){
int i、j;
readf( "%s"、&);
readf( "%s"、&j);
}

変換を試行する前に、2番目のパラメータの前のスペースは、readfにすべての の空白を読み込んでスキップするように指示します。

精度を向上させるために、readfをscanfよりも空白について多くのナジが公平に使うよう実装しました。 scanf関数は、 複雑な入力の解析と検証に使用する有名困難であっ と私は 空白に向けてその自由放任主義的な態度にそのいくつかの属性ました。私たちのユーザのほとんどが に役立つという十分な証拠がある場合は、正確な 空白の取り扱いに関するreadfの主張を緩和してうれしいです。私は個人的には、現在の行動(デフォルトでは が厳しく、リラックスしやすい)が最も良いと考えています。

http://www.digitalmars.com/d/archives/digitalmars/D/bugs/Issue_4656_New_stdio.readf_does_not_ignore_white_space_24214.html

関連する問題