ユーザーからの数値の入力や、ユーザーが入力したいときにユーザーが選択した算術演算子を取得する方法はありますか?私は基本的に、ユーザーが最初に数字を入力し、最後にそれに適用できる演算子を入力する一種の計算機を作成しようとしています。ただし、ユーザーが最初にいくつの数字を入力するかという修正の制限はありません。そのユーザーの願い。そして、私のプログラムは、それが文字入力か整数入力かをそれ自体で推測する必要があります。出来ますか ??
5 に答える
単純な算術的なプログラミングの問題を進めるための概要です。
入力を文字として受け取り、char 配列バッファーに格納します。そして、strtol
あなたを使用してそれをに変換できますlong int
。
また、各インデックスの文字が演算子を表す文字配列として演算子を使用します。
Applyswitch - case
およびそのケースに基づいて (これは operator+
などに-
なります)、操作を実行します。
他の方法は、変換infix arithmetic notations
してpostfix notations
それを使用stacks
し、単純に解決することです。この場合、演算子を stack に格納するロジックを既に適用しているため、演算子の優先順位に問題はありません。1 つずつポップして操作を実行するだけです。
整数は 0 ~ 9 またはマイナス記号で開始する必要があります。
演算子は 1 文字のマイナス記号または 0 ~ 9 文字以外である必要があります。
入力を文字列として取得し、それが演算子か整数かを判断してから、atoi を使用して文字列を整数に変換します。
電卓を書くことができれば、それは簡単な作業です。
私のアドバイスは、OPP(オブジェクト優先パーサー)を構築して、ユーザーが入力した文字列を操作することです。入力を文字列として受け取る場合、ユーザーは算術演算子とともに代数方程式全体を入力する権限を持っています。これは、それらが文字のみと見なされるためです。次に、それを char 配列に変換して、OPP 操作を実行することができます。 http://code.google.com/p/expressionparser/
または、数字、演算子、数字のように段階的に入力することもできます:)
多くの詳細や、これを処理する方法の例を実際に挙げていないので、これ以上のアドバイスはできません。順序や入力量 (数字/文字) がわからないため、文字列として取得することをお勧めします。
char *expression_buf = NULL;
scanf("%m[^\n]", expression_buf); // grab any number of characters/digits with spaces
//do some postfix stuff
free(expression_buf);
次に、数字とそうでないものを次のように判断できます。
#include <ctype.h>
isdigit(expression_buf[index])
必要なツールはこれでほぼすべてです。次に、数字/演算子を取り出して、順番に適用します。それらをスタックに配置すると、正しい順序でポップバックできるようになります。