2017-07-28 3 views
0

ここでは例101-Name-3.4を入力しましたが、3.4は入力されていません。それは出力に表示されていません。これをどうすれば解決できますか?最後の入力(フロート)データをC言語で取得するにはどうすればよいですか?

for(i=0; i<n; ++i){ 
    printf("Enter ID-Name-CGPA receptively: "); 
    scanf("%lld-%[^-]s-%f", id[i], name[i], cgpa[i]); 

} 
+1

は何'id'? 'name'とは何ですか? 'cgpa'とは何ですか?彼らの宣言を表示できますか? –

+1

また、%["' '書式指定子は' 's'で終わらない*。おそらく[この 'scanf'(および家族)のリファレンス](http://en.cppreference.com/w/c/io/fscanf)は読むのに役立つでしょうか? –

+0

'%[^ - ] s'から' s'を削除します。 (おそらく 'scanf("%lld - %[^ - ] - %f "、&id [i]、name [i]、&cgpa [i]);') – BLUEPIXY

答えて

3

あなたはフォーマット文字列でスキャンセットディレクティブから後続sを削除する必要があります。

scanf("%lld-%[^-]-%f", id[i], name[i], cgpa[i]); 

sは、スキャンセットディレクティブの一部ではなく、そうscanf()はしようとし、失敗しています、入力のsと一致するようにします。これは、コードが戻り値をscanf()という呼び出しからチェックしていた場合に検出されます。これは常に良い方法です。

また、何の宣言は示されていないが、id[]long long intの配列として宣言され、そしてcgpa[]floatの配列として宣言され、次いで、アドレス演算子を使用する必要がある場合:

int ret_val = scanf("%lld-%[^-]s-%f", &id[i], name[i], &cgpa[i]); 
/* ret_val should be 3 */ 
+0

@ AbdullahAlmasud-- unaccepted?変化したこと?自分の答えを改善できる方法はありますか?私はこれが拒否された編集についてではないことを願っています。それは私のコミュニティではなく、あなたの提案された編集をすぐに受け入れない理由を与え、あなたの質問を変更して編集を受け入れる方法を説明しました。 –

関連する問題