2016-10-07 4 views
0

私には、ユーザーが望む数学的な表をユーザーに表示する必要があります。ただし、入力はコマンドライン引数を使用する必要があります。私は単一の入力でこれを行う方法を知っている..しかし、私は機能を追加する必要がありますので、ユーザーのタイプ:私のプログラム5-7私は5、6と7の乗法表を表示する必要があります..どのように回避することができますこれとともに ?これは、C++コマンドラインの範囲を使用する

で行わなければなりません

これは私のコードです:

#include <iostream> 
#include <cctype> 
#include <iomanip> 
using namespace std; 

int main(int argc,char *argv[]){ 
int i; 
locale loc; 
int tables[argc-1]; 

if(argc <=1){ 
cout<<"NO ARGUMENTS PASSED"<<endl; 
exit(0); 
} 

for(i=1;i<=argc;i++){ 
if(isdigit(argv[i],loc)){ 
tables[i] = atoi(argv[i]); 
} 
} 

for (i=1; i<=argc;i++){ 
cout<<argv[i]<<endl; 
} 


} 
+0

「argc」と「argv」? – Dai

+1

引数は、例えば、 '5 - 7'の間にスペースを入れますか?あるいはスペースなしで '5-7'でなければなりません。いずれにしても、あなたが読んで解析するための 'argv'配列の中にすべてがあります。 –

+0

はい、ユーザーが5-7を入力したときですか?どうすれば入力を分割できますか? –

答えて

1

まず "テーブル2-3"、 "テーブル2から3" 扱いするかどうかを決定する、またはその両方を。

私たちは両方を選ぶと言います。したがって、argcは、1つの引数の場合(argv [0]はプログラム名であることを忘れないでください)、3つの引数の場合は4つのいずれかでなければなりません。それが2または4でない場合は、プログラムを使用する方法をユーザーに知らせるために使用法のメッセージを出力し、終了します。

が4の場合、argv [1]は整数でなければならず、argv [2]は文字列 " - "でなければならず、argv [3]は整数でなければなりません。また、argv [3]がargv [1]より大きいことを要求することもできます。 これをテストします。 strcmpは中間をテストします。関数strtol()は、有効な整数をテストする簡単な方法を提供します(終了ポインタは、整数であれば終了時にnulを指す必要があります)。

argcが2の場合、文字列は12-30、整数、ハイフン、整数の形式でなければなりません。これをテストするにはいくつかの方法があります。 1つはstrtolを呼び出し、最後のポインタがハイフンを指していることを確認してから、ハイフンの後の文字についてstrtolを再度呼び出します。関数sscanf()を使用することもできます。

ここで、マイナスやゼロなどの大文字と小文字の違いを処理する方法を決定します。

最後に表を印刷します。

関連する問題