注:元の質問は何度も変更されており、コードも同じように頻繁に変更されており、反復ごとに新しいエラーが発生しています。元のコードに回答したので、この回答を残します。履歴を参照してください。この回答の下には、コードの代わりにアドバイスを提供する更新があります。
うーん、アスタンダーは彼の答えを削除しました。しかし、おそらくこれはあなたが実際に持っているべきものです:*
char getCategory(float height,float weight)
{
char invalid = '\0';
if(height<=0 || weight<=0)
return invalid;
return 'c'; /* do something for the valid cases */
}
*もともと質問に含まれheight || weight <= 0
ていて、 variable の値がありませんでしinvalid
た。
コードに関する注意:
適切なインデントを使用すると、プログラムの流れがより明確になります。これが実際にあなたの意図であると仮定して、私はあなたのif文を修正しました。最後の行には、質問で現在省略しているものを含める必要があります。最初の行に初期化を追加しました。これは、値を持たないよりも値を持つ方が良いためです (つまり、初期化しないと、実際には何でもかまいません)。
呼び出しコードでは、次のことができます。
Category = getCategory(height, weight);
if(Category == 0)
printf("invalid");
else
printf("%c", Category);
意図した場合、実際には「無効」という単語が出力に出力されます。
更新:質問の新しいテキストに基づいて、質問者が何か他のものを望んでいることは明らかであるため、ここに新しい回答があります。上記はそのままにしますが、元の質問でも有効です。
ここで、「無効」という単語を出力しないように、また無効なケースに特別な値を使用しないように求めています。代わりに、 return を要求します。これは、値が「無効」の文字列を返すと理解しています (それ自体は、まだ特別な値を返しています)。"invalid"
あなたはそれをすることはできません
要するに、それはできません。現在の関数の戻り値の型はchar
です。私はあなたの関数の目的を知りませんが、あなたはそれにいくつかの考えを与えたと確信しています.aを使用する理由がありchar
ます. char には 1 文字しか含めることができません。そして、「無効」という言葉は複数の文字です。いくつかのオプションがあります。最適なものを選択してください。
他の方法
- 戻り値の型を
string
ではなく に変更しchar
ます。これには、関連するすべてのコードの再設計が必要です。
- 特別な値を返すことで解決します。関数の本体は表示されませんが、通常は返されない場合は
\0
、上記の例のようにその値を使用できます。もちろん、他の char 値を選択することもできます。
- 例外を発生させ、本体で try/catch を使用します。ただし、C++ ではなく C を使用します。C のC++ スタイルの例外処理の使用について説明するリンクを次に示しますが、これは少し範囲外である可能性があります。C の学習は、その時点で小さなステップで行うことをお勧めします。
一般的なベスト プラクティスとは
通常の状況では、特殊なケースの値 (C やアセンブラーなどの古い言語またはより基本的な言語で一般的) または例外 (C++、Java、Python などのより構造化された言語で一般的) のいずれかを選択するのが一般的です。特殊なケース (無効な入力など) のために完全な関数を変更することは、一般的に悪い習慣と考えられています。
どうして
代わりに、関数の呼び出し元がこれらの特殊なケースに対処する必要があります。この理由は、プログラミングにおける非常に重要なルールです。関数は、何か悪いことが起こった場合 (不正な入力)、その関数のユーザーが何をしたいのかを事前に知ることはできません。「不正な入力」を出力することを選択する場合 (コマンドライン ユーザーの場合)、プログラムを終了する場合 (ライブラリ内の場合)、無視して何もしない場合 (自動処理の場合) があります。要するに、達成しようとしていることは、別の方法で達成しようとする必要があります (上記のオプション 2 と 3、および私の元の解決策を参照してください)。
教師と教科書
このアプローチを使用することは、一般的なコンピューターの慣行に従っているため、はるかに簡単であり、(将来の) 同僚にとっても理解しやすいものです。もちろん、あなたの課題や教科書を見たことがないので、彼らがどの方向に解決策を望んでいるのかはわかりませんし、最初にあなたに間違った道を示す教科書や教師になることはありません。そして、あなたに正しい道を示します。