リンクリストノードを作成するプログラムを作成しています。その後、いくつかの関数(挿入、検索、更新、および印刷)を追加します。リンクされたリストには、番号、名前、および数量が含まれています。C:fgets関数が動作しないのはなぜですか?
main関数は、ユーザーに操作コードの入力を求め、関数が要求した操作を呼び出します。
main()
{
char code;
int c;
for(;;)
{
printf("i: insert\ns: search\nu: update\np: print\n");
printf("Enter operation code: ");
scanf("%c",&code);
while((c=getchar())!= '\n'&& c!=EOF);
switch(code)
{
case 'i': insert();
break;
case 's': search();
break;
case 'u': update();
break;
case 'p': print();
break;
case 'q':return 0;
default: printf("Illegal code\n");
break;
}
printf("\n");
}
}
すべての機能が正しく動作します。しかし、insert関数では、ユーザからの文字列入力を得るためにfgets文を使用します。 (NAME_LEN = 25)
残念ながら、このコードは機能しません。プログラムはそれを示しています
i: insert
s: search
u: update
p: print
Enter operation code: i
Enter part number: 2
Enter name part: Enter quantity on hand: 3
これが分かるように、名前の部分が欠落していました。
さらに、新しいノードを挿入した後、プログラムは自動的にデフォルトのケースをスイッチに表示します。
i: insert
s: search
u: update
p: print
Enter operation code: i
Enter part number: 2
Enter name part: Enter quantity on hand: 3
i: insert
s: search
u: update
p: print
Enter operation code: Illegal code
私には何が起こるか説明できますか?
あなたは何が問題なのか理解していますか? – coderredoc
scanfの代わりにfgetsを使用すると、scanfはinbufferの内容を残します。 –
ヒント:「なぜ(Cライブラリ関数名を挿入してください)関数が機能しないのですか?」という質問をいつでも書くことができます。問題。 –