2016-10-07 60 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必須是2(記住argv [0]是程序名),或者對於三個參數情況,4必須是4。如果不是2或4,則打印出使用消息以告訴用戶如何使用該程序並退出。

如果是4,則argv [1]必須是整數,argv [2]必須是字符串「 - 」,並且argv [3]必須是整數。您可能還需要argv [3]大於argv [1]。 所以測試這些。 strcmp會測試中間的。函數strtol()提供了一種簡單的方法來測試一個有效的整數(如果它是一個整數,結束指針應該指向nul的出口)。

如果argc是2,則字符串必須在形式12-30中,一個整數,一個連字符和一個整數。有幾種測試方法。一種是調用strtol,然後檢查結束指針是否指向連字符,然後在連字符後面的字符上再次調用strtol。你也可以使用函數sscanf()。

現在決定如何處理負值或零等情況,而巨大的值可能會超出機器的精度。

最後打印出表格。