2016-10-15 10 views
0

私はフォーム1(xxx)-xxx-xxxxの電話番号を入力し、その数字の桁を合計するようにコードを要求します。しかし、私は自分のコードに何が間違っているのか分かりません。下記を参照。scanfを使用して電話番号の数字を合計

printf("Enter a phone number in 1(xxx)-xxx-xxxx format: \n"); 
scanf(" %*c%*c%d %d %d %*c%*c%d %d %d %*c%d %d %d %d", &i, &j, &k, &l, &m, &n, &o, &p, &q, &r); 

sum = (i + j + k + l + m + n + o + p + q + r); 
realsum = sum + 1; 

printf("The sum of the digits = %d \n\n", realsum) 

;

誰でも手助けできますか?それは、番号(xxx)の最初の部分を完全にiに割り当てているようであり、jはゼロです。各桁を各変数に1つずつ割り当てる方法を教えてください。

+0

私は非常に新しいCですが、おそらく私は根本的にこれについて間違っていますか? – Froobyflake

+1

'scanf'を使わなければなりませんか?文字列全体を読み取って確認してみてください。あるいは、一度に1つのcharを読み込むために 'getc'を使います。 –

+0

私はそのようなことを望みましたが、これはscanfを使用する必要がある宿題のためのものです – Froobyflake

答えて

4

問題は、それが小数の一部にすることはできません文字を見つけるまで%dが読んで保持していることです。ユーザーが1(123)-456-7890と入力した場合、最初の%di123に設定します。

解決策は、%1dを使用することです。それはscanfに1桁の10進数を読み取るように指示します。

btw:scanfの戻り値が正しいことを確認する必要があります。この例では、正しい戻り値は10です。他の数字は、ユーザーが有効な電話番号を入力しなかったことを示します。

1

あなたは、ユーザが入力する非整数の文字のためのアカウントをしましたが、整数は全体として読まれ、その1231として読み込まれていない、その後2その後3ではなく、123として。

scanf(" %*c%*c%d %*c%*c%d %*c%d ", &i, &j, &k); 
+0

興味深いことに、%* cが実際に行ったことを誤解していたようです。ありがとう、私はこれを試してみましょう! – Froobyflake

+0

@Froobyflakeあなたは '%* c'のことを誤解していませんでした。あなたはそれを正しく使用していました。 – user3386109

+0

いいえ、_Anオプションのアスタリスクの開始は、データがストリームから読み取られますが無視されることを示します(つまり、引数によって指し示される場所には格納されません)。_ @ user3386109の答えが正しいです。 –

関連する問題