Я хочу, чтобы иметь возможность читать текстовые файлы из командной строки, но моя программа не компилируется. Кто-нибудь знает, что я делаю неправильно?Аргумент командной строки для чтения текстового файла
Я пытаюсь иметь команду как принять menu.txt файлы и читать их и поместить их в массив, но я не знаю, как он читал их из командной строки
Так что Я пытаюсь сделать это
1) ./a.out menu1.txt menu2.txt
И позволить пользователю выбрать, сколько файлов они хотят читать, так это может быть также
2) ./a.out menu1.txt menu2.txt menu3.txt, как это сделать?
menu1.txt
hamburger 5.00
pizza 3.25
chips 2.50
menu2.txt
hamburger 2.00
pizza 2.35
chips 1.50
menu3.txt
hamburger 4.00
pizza 5.35
chips 0.50
Это то, что я до сих пор:
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char* argv[]){
ifstream inStream;
ofstream outStream;
for(int i=1; i <= argc; i++)
// i=1, assuming files arguments are right after the executable
{
string fn = argv[i]; //filename
cout << fn;
fstream f;
f.open(fn);
//inStream.open("menu1.txt");
// inStream.open("menu2.txt");
string item[10];
double cost[10];
// ifstream m1("menu1.txt");
//ifstream m2("menu2.txt");
string name;
double var;
string line;
istringstream iss(line);
short loop=0;
if(f.is_open()){
while(!f.eof()){
iss >> name >> var;
getline(f, line);
while(f>>name>>var){
item[loop]=name;
cost[loop]=var;
cout << "Item at index " << loop << " " << item[loop]<<endl;
cout << "Cost at index " << loop << " " << cost[loop]<<endl;
loop++;
}
}
f.close();
}
}
return 0;
}
Это сообщение об ошибке при попытке компиляции:
p3.cpp: In function ‘int main(int, char**)’:
p3.cpp:17:25: error: no matching function for call to ‘std::basic_ifstream<char>::open(std::string&)’
inStream.open(fn);
^
p3.cpp:17:25: note: candidate is:
In file included from p3.cpp:1:0:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4/fstream:541:7: note: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
open(const char* __s, ios_base::openmode __mode = ios_base::in)
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4/fstream:541:7: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*’
Какова ваша конкретная проблема? –
Он пытается заставить пользователя ввести столько файлов, сколько аргументов в программу. Например. пользователь может указать 2 файла, 3 файла или что угодно. –
Я пытаюсь получить команду, как принять файлы menu.txt, и прочитать их и поместить в массив, но я не знаю, как его прочитать из командной строки – user5999727