※ ChatGPTを利用し、要約された質問です(原文:scanfの後のfgetsについて)
scanfとfgetsの使い方と注意点について
このQ&Aのポイント
fgets関数が改行コードを読み取って、終了してしまい文字列入力ができない場合、scanfとfgetsを組み合わせて利用する方法があります。
具体的には、scanfの後にfgetsを使用し、改行文字を読み込むようにします。
また、fgetsを2度使用することで、文字列の入力が可能になりますが、見た目やコードの可読性に影響があるため、適切な方法ではありません。
#include <stdio.h>
int main(void)
{
char name[10];
int no;
printf("ナンバーを入力してください: ");
scanf("%d",&no); /* 35を入力 */
printf("文字列を入力してください: ");
fgets(name,10,stdin); /*入力できない*/
return 0;
}
この例文だと、fgets関数が改行コードを読み取って、終了してしまい文字列入力が出来ないみたいなんですが、scanfの後にfgetsを使うような(scanfとfgetsの間にscanfの残した?改行コードを取り除く方法)処理はどのような方法があるのでしょうか?
試しにfgets文を2度書いたら思っていた動作をしてくれたのですが、はたしてfgets文を2度書くというような事をしていいものなのでしょうか?見た目もなんだか変な感じですし。。↓
#include <stdio.h>
int main(void)
{
char name[10];
int no;
printf("ナンバーを入力してください: ");
scanf("%d",&no); /* 35を入力 */
printf("文字列を入力してください: ");
fgets(name,10,stdin);
fgets(name,10,stdin); /*入力できる*/
return 0;
}
お礼
ご回答ありがとうございます。 思っていた動きをしたのですが次のようなソースにした場合、文字列が入力できませんでした・・・(ナンバー、基本地しか入力できない)環境はVisual c++ 2010です。 #include <stdio.h> int main(void) { char name[10]; int no,kihon; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ scanf("%*[^\n]%*c"); printf("文字列を入力してください: "); fgets(name,10,stdin); printf("基本値を入力してください:"); scanf("%d",&kihon); return 0; } ただBorland C++ Compiler 5.5で実行すると希望の動作になりました(ナンバー、文字列、基本値の3つの入力が可能。) どこが悪いんでしょうか・・