2017-03-18 9 views
0

このポストに添付されているコードは大きなプログラムの一部ですが、構造化変数 'title'と 'author'の入力を受けているときに問題が発生しています。 プログラムがループして次の行に移動したようです。また、文字列指定子の中で[^ \ n]の前に[^ \ n]を使用していますが、scanfを使用して文字列を入力として使用するのと同じです。いくつかの記事を読むが、問題を理解することはできない。 ちょうどCで始まる、どんな助けもありがとう!構造入力にscanfを使用する

struct books{ 
char title[30]; 
char author[30]; 
char subject[20]; 
int quantity; 
int book_id; 
char *category; 
int count; 
float price; 
}; 
struct books book; 

book.book_id=id; 
printf("\n\n\t\tBook Name:\n\t\t"); 
scanf(" %s",book.title); 
printf("\n\n\t\tAuthor:\n\t\t"); 
scanf(" %[^\n]s",book.author); 
printf("\n\n\t\tQuantity:\n\t\t"); 
scanf("%d",&book.quantity); 
printf("\n\n\t\tPrice:\n\t\t"); 
scanf("%f",&book.price); 
+0

これは%sより前の領域かもしれません – Luci

+1

フォーマット指定子に '[^ \ n]ではなく' [^ \ n] 'が含まれていますか?そこに余分なスペースも必要ありません。 '[^ \ n]'は、文字列区切り文字としての空白ではなく、特に\ nを指定します。あなたがそれを試してみたら、それはあなたが投稿しておくべきコードです。入力にスペースが含まれていない場合、またはそれに問題がある場合は機能しますか? – Clifford

+1

[mcve]してください!ところで、 '[^ \ n]の後の' s'は間違っていて、削除する必要があります。これは何の効果もありませんが、完全に余分です。 –

答えて

0

使用入力 "book.title" の両方の文字列指定で 'S' と "book.author" の前に[^ \ n]は。

私はあなたのコードを修正して実行しました。コードは正しいです。

書籍のタイトルとしてスペース文字列を使用しています。 を使用して、スペース区切りの単語を単一の文字列として入力することはできません。プログラムはそれをループし、次の行に移動します。あなたがfgetsの機能を取得または文字列指定子で「S」の前に[^ \ nを]使用を使用する必要があります、このような入力を取るために

+0

は実際には(book.title)を取得します。タイトルを著者にループします。 –

+0

scanfを使用して文字列をスペースで受け入れることができます。重複とマークされた回答を参照してください。文字列の入力にscanfを使用するのが賢明かどうかは別の問題です。 – Clifford

+1

@SyedHasan: "ループオーバー"とはどういう意味ですか?コードフラグメントにループが含まれていません。 'gets()'を使わないでください。さらに悪いことに 'scanf()'! fgets()と 'scanf()'を使った例題が重複しています。 – Clifford

関連する問題