2017-02-18 3 views
0

Je souhaite être capable de lire des fichiers texte à partir de la ligne de commande. Donc ce que je suis en train de faire estLecture de fichiers texte à partir de l'invite de commande

1) ./a.out menu1.txt menu2.txt

Et laisser l'utilisateur choisir le nombre de fichiers qu'ils veulent lire il pourrait aussi être

2) ./a.out menu1.txt menu2.txt menu3.txt comment je fais ça?

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 

C'est ce que j'ai jusqu'à présent:

#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

OK. Qu'avez-vous essayé? Où est ton code? –

+0

Alors allez-y et essayez de lire les fichiers :) - vous avez la boucle prête – Dusteh

+0

Votre livre devrait vous dire comment utiliser un 'ifstream'. Vous avez un [bon livre] (http://stackoverflow.com/a/388282/7455774), n'est-ce pas? –

Répondre

0

Fonction main fournit le nombre d'arguments de ligne de commande et les valeurs des arguments (y compris le nom du programme lui-même): Avec cela, vous pouvez réaliser ce que vous voulez.

#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; 
} 

Pour plus de détails, conférer, par exemple, cppreference - main function. Il explique, par exemple, que le « nom du programme » pourrait être une chaîne vide:

argv [0] est le pointeur sur le caractère initial d'un zéro terminal des chaînes multi-octets qui représente le nom utilisé pour invoquer le programme lui-même (ou une chaîne vide « » si ce n'est pas pris en charge par l'environnement d'exécution )

+1

Avertissement: 'std :: cout <<" Le nom utilisé pour démarrer le programme: "<< argv [0]' n'est pas entièrement vrai. Il y aura un 'argv [0]', mais il peut être laissé vide. – user4581301

+0

@ user4581301: Merci d'avoir signalé cela. Adapté la réponse en conséquence. –

0

Vous l'avez fait la plupart du temps.

  1. Vous avez une mauvaise signature de votre principale - que Shold être int main(int argc, char** argv) ou int main(int argc, char* argv[])
  2. Je ne comprends pas pourquoi vous essayez d'initialiser menu1, menu2 et menu3 avec le même argument.

Vous pouvez stocker vos chemins de fichier dans certains std::vector<std::string> pour une utilisation future.

#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; 
}