私はプログラミングには比較的新しいですが、だからこそ長い間lurkerされています。文字列からキーワードを読み込むときにif文をリファクタリングする
私は現在大学で勉強していますが、入力と出力が16進数でユーザーに表示される非常に基本的な電卓であるプログラムの作成に少し問題があります。
ほとんどのコードは良いですが、この特定のコードをリファクタリングする方法があるかどうか疑問に思っていたので、if文の大きなブロックを使用してオペレータそれに対応する関数に入りますか?
これは私が何をしたか、そして私がリファクタリングする必要があるもののスニペットです。
個人的には、私は入れ子にするか、おそらくこのためにループを利用するように感じますが、私は確かに知るための十分な知識がありません!
ありがとうございました。
int main() {
printf ("Type in an expression: ");
scanf ("%x %s %x", &a, op, &b);
if (strcmp (op, "add") == 0)
{
add(a, b);
}
if (strcmp (op, "sub") == 0)
{
sub(a, b);
}
if (strcmp (op, "and") == 0)
{
band (a, b);
}
if (strcmp (op, "or") == 0)
{
bor (a, b);
}
/* ...... and so on .....*/
}
文字列と関数ポインタを含む構造体の配列を持ち、その文字列と一致するようにそのループをループし、関数を呼び出すことができます。もう1つの方法は、ハッシュテーブルを作成することです。ハッシュテーブルは、操作数がかなり少ないので少し重いかもしれません。 –
また、 'scanf'呼び出しにも注意してください。あなたは戻り値をチェックしておらず、scanfの ''%s "'は危険です。あなたのユーザがあなたのバッファをオーバーフローさせる可能性があります。 – PSkocik