2017-02-18 6 views
0

Я хочу иметь возможность читать текстовые файлы из командной строки. Так что я пытаюсь сделать, этоЧтение текстовых файлов из командной строки

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> 
int main(int argc, char *argv) 
{ 
    ifstream inStream; 

    for (int i = 1; i < argc; i++) { 

    String menu1 = *argv[i]; 
    String menu2 = *argv[i]; 
    String menu3 = * argv[i]; 
    cout << i << " " << endl; 

} 

}

+0

Хорошо. Что вы пробовали? Где ваш код? –

+0

Затем пойдите для этого и попробуйте прочитать файлы :) - у вас есть готовая петля – Dusteh

+0

Ваша книга должна рассказать вам, как использовать 'ifstream'. У вас есть [хорошая книга] (http://stackoverflow.com/a/388282/7455774), правильно? –

ответ

0

Функция main предоставляет количество аргументов командной строки и значения аргумента (в том числе имя самой программы): С этим вы можете достичь того, чего хотите.

#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::cout << "The name used to start the program: " << argv[ 0 ] 
    << "\nArguments are:\n"; 
    for (int n = 1; n < argc; n++) 
     std::cout << n << ": " << argv[ n ] << '\n'; 
    return 0; 
} 

Для получения более подробной информации, например, cppreference - main function. Это объясняет, например, что «название программы» может быть пустой строкой:

ARGV [0] является указателем на начальный характер нуль-терминатором мультибайтных строки, которая представляет имя используется чтобы вызвать программу сам (или пустую строку «», если это не поддерживается средой исполнения )

+1

Предостережение: 'std :: cout <<" Название, используемое для запуска программы: «<< argv [0]' не совсем верно. Будет 'argv [0]', но он может быть пустым. – user4581301

+0

@ user4581301: Спасибо, что указали это. Адаптированный ответ соответственно. –

0

Вы получили это в основном сделано.

  1. У вас есть плохие подписи ваш главный - что shold быть int main(int argc, char** argv) или int main(int argc, char* argv[])
  2. Я не понимаю, почему вы пытаетесь инициализировать menu1, menu2 и menu3 с тем же аргументом.

Вы можете сохранить ваши пути к файлам в некотором std::vector<std::string> для дальнейшего использования.

#include <string> 
#include <vector> 

int main(int argc, char** argv) 
{ 
    std::vector<std::string> filePaths; 
    for (int i = 1; i < argc; ++i) { 
     filePaths.emplace_back(argv[i]); 
    } 

    //... 

    return 0; 
} 
Смежные вопросы