2016-10-07 5 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 для трех аргументов. если это не 2 или 4, распечатайте сообщение об использовании, чтобы сообщить пользователю, как использовать программу и выйти.

Если is is 4, argv [1] должен быть целым числом, argv [2] должен быть строкой «-», а argv [3] должен быть целым числом. Вы также можете потребовать, чтобы argv [3] был больше argv [1]. Итак, проверьте их. strcmp проверит середину. Функция strtol() предоставляет простой способ проверить допустимое целое число (конечный указатель должен указывать на nul на выходе, если он является целым числом).

Если argc равно 2, строка должна быть в форме 12-30, целое число, дефис и целое число. Для этого есть несколько способов тестирования. Один из них - вызов strtol, затем проверьте, что конечный указатель указывает на дефис, а затем вызовите strtol снова на символ после дефиса. Вы также можете использовать функцию sscanf().

Теперь решайте, как обращаться с такими случаями, как отрицательный или нулевой, и огромные значения могут превышать точность вашей машины.

И наконец распечатать таблицы.

Смежные вопросы