2012-03-21 13 views
0

私のコードに問題があります。これは初心者、入力を解析するためにscanf()を使用することはできません。

1 34 2 67 -5 C

又は

3455 124 -123 111 S 123 3544 FG

または任意等の入力を解析しなければなりません他の文字の組み合わせ(長さ1)と数字。ここに私のコードです:

char oper = 0; 
int number = 0; 
do{ 
    if(scanf("%d", &number)==1) 
    { 
     ... 
    } 
    else 
    { 
     scanf("%c", &oper); 
     if(oper == 'g') 
     { 
      ... 
     } 
     if(oper == 'h') 
     { 
      ... 
     } 
     ... 
    } 
} while(oper != '\n'); 

それがoperscanf("%c", &oper);コピー「\ n」は文字に取得し、私はそれが「」または「S」

が間違って起こっている何になりたい、とするとそれを修正するために私は何ができますか?

+0

私は要件を理解していません。あなたは精緻化できますか? –

+0

オペレーター変数に文字を入れることができません。 –

+0

* 'if(oper == 'g')...' * 'switch' /' case'構文を見るのが良い時期です。このコードは*間違っているわけではありませんが、経験豊かなcプログラマーは、おそらくそれが非idomaticであると感じます。 – dmckee

答えて

1

scanf( "%d" ...)は、過去の空白(空白、タブ、改行)をスキャンして数値にアクセスします。

scanf( "%c" ...)は次の文字を読み取ります。

過去の空白をスキャンする方法を理解する必要があります。 scanfのフォーマットの定義を見てきましたか?

Wikipediaは、通常のマニュアルページと比較して非常に役立つようです。

+0

はい、私は見ました。空白文字は "/ n"と解釈されていませんでした –

+0

'isspace'を使って空白文字を拒否することができました。他の素晴らしい機能については、 'man isspace'を参照してください。 –

+0

それ以外の場合は、@gbulmerのWikipediaリンクを参照してください。 –

関連する問題