私はユーザー入力を使用してプログラムを制御しています。私は2つの配列を持っています。gets()からの入力がchar配列に保存された値と一致しません
最初は、controlWord
と呼ばれる1次元の文字配列です(これはユーザー入力を格納します)。
第2-Dアレイは、ユーザがI保存しgets()
を使用する入力を求めるプロンプトが表示されている場合
char controlWord[100]; //control word compare it to promptWord
char promptWord[5][100]={"Add","Subtract","Multiply","Divide","?"}; //for program control
(コードプリフォームであろうアクションに対応する単語を含む文字列の配列)promptWord
と呼ばれ最初のchar配列への入力次に、このchar配列を、ユーザーが入力する可能性がある潜在的なプロンプト・ワードで満たされた2番目のchar配列と比較します。
printf("\n\ncontrolword: ");
gets(controlWord);
if (strcmp(controlWord, promptWord[0]))//Add
{
//stuff
}else if (strcmp(controlWord, promptWord[1]))//Listen
{
//more stuff
}else
私は部分文字列を検索したくありません。私は完全一致が欲しいだけです。文字列を慎重に入力してもうまく動作するはずですが、エラーが発生しています。 (「?」特に付き)
編集:ABC 『"。次のような文字列リテラルへのユーザーの入力を比較した場合には 『\ n』はバッファにgets
/fgets
ストア改行文字、また』 としてはhereを指摘それは決して一致しません "
今私はキャッチ22:私はgets()
を使用することができます悪い練習、または私はfgets()
新しいライン文字をつかむことができます使用することができます。最後の非ゼロ文字はゼロにすることができますが、入力が正確に99または100文字の場合はどうなりますか?私は自分のchar配列の最初の100文字のための部屋しか持っていないので、もし私が99文字+新しい行か100文字を持っていて、私は新しい行を失ったのですか?
私はgets
を回避するソリューションを探していますが、ヌル文字を検索する場合はfgets
よりもエレガントです。
まず、読んで[ man gets](https://linux.die.net/man/3/gets): "gets()を使わないでください"。次に、Cのテキストブックを読んだり、Cで文字列を比較する方法を探します(ヒント: '=='ではありません)。 – kaylum
[Cの文字列を正しく比較するにはどうすればよいですか?](http://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings-in-c) – kaylum
@kaylumありがとう!あなたがリンクした質問からのこの[回答](http://stackoverflow.com/a/8004271/7126924)だけでなく、gets()/ fgets()の両方が改行文字を取得し、文字列リテラルと比較しようとします。 –