2009-09-11 15 views
6

には気にしない、次のを想像してみて:はscanfの

あなたはscanf()と、文字列に読み込むいますが、文字列だけではデータポイントの数を必要としています。

不適切な情報を簡単に拒否できる適切なデータがあるかどうかをチェックする機能を失うことなく、不要な情報を簡単に捨てることはできますか?

例:

const char* store = "Get: 15 beer 30 coke\n"; 
const char* dealer= "Get: 8 heroine 5 coke\n"; 
const char* scream= "Get: f* beer 10 coke\n"; 

私は、最初の文字列を受け入れるようにしたいが、ビールはyuckieあるので、ビールを忘れます。 2番目と3番目の文字列を拒否したいのは、それらが7/11の適切なリストではないからです。コンパイラ駄々をこねるがありません

char* bId = new char[16]; 
char* cId = new char[16]; 
int cokes; 
sscanf([string here], "Get: %d %s %d %s\n", [don't care], bId, &cokes, cId); 

私はフォーマットのチェックを維持するだろうが、私は何を入れます。この方法は、[気にしない]:

だから私は、次のような構成を考えていましたか?

もちろん、私は後で使用しない変数を作ることができますが、それはこの質問のポイントではありません。また、左側と右側を別々にチェックすることは、私がここで探していない明らかな解決策です。

ですから、scanfやお友達の文字列の種類を気にせずにチェックする方法はありますか?

答えて

17

は%

例の後に割り当て抑制文字として*を使用します。

sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId); 
+3

私はそれが明らかまたは不可能のどちらかだろう知っていました。 – NomeN