У меня есть эта программа, и я хочу заполнить массив таблиц значениями, переданными из командной строки в целочисленной форме. Однако это строка s только назначается аргумент 6 .. в чем проблема?
#include <iostream>
#include <cctype>
#include <locale>
#include <cstdlib>
#include <sstream>
#include <string>
using namespace std;
int main(int argc,char *argv[]){
int i;
int tables[100];
stringstream str;
string s;
int result;
char value;
if(argc <=1){
cout<<"NO ARGUMENTS PASSED"<<endl;
exit(0);
}
/*char value = *argv[1];
cout<<value<<endl;
str << value;
str >> s;
result = stoi(s,nullptr,10);
cout<<result<<endl;*/
for (i=1;i<argc;i++){
if(isdigit(*argv[i])){
value = *argv[i];
str<<value;
str>>s;
cout<<s<<endl;
tables[i-1] = stoi(s,nullptr,10);
}
}}
Проверка функции isdigit, если символ является цифрой, поэтому командная строка
isdigit(*argv[i])
Возвращаемое значение true — первый символ char * — это цифра. Что вы хотите, чтобы преобразовать символ * в целое число, я предлагаю взглянуть на функция Атои.
Однако преобразование строки для печати вашего результата не является обязательным.
Проблема в том, что вы используете stringstream
неправильно
Письменно str >> s
вы достигаете eof
в потоке.
Чтобы это исправить, вы можете избежать использования stringstream
и вместо этого прямо назначить value
в s
,
Если вы хотите использовать stringstream
, вы можете сбросить его обратно в исходное состояние после записи в s
следующее:
str.str(std::string{});
str.clear();
и использовать его снова