C ++ probleem proberen om een ​​txt-bestand met behulp van ifstream openen

stemmen
-1

Dit kleine stukje code is ontworpen om te kijken door middel van een tekstbestand en identificeren van rekeningnummers die al zijn geschreven, zodat later in mijn programma, kunt u de juiste account te vinden zonder de fout van de twee accounts met hetzelfde rekeningnummer (id) . Maar maakt niet uit wat ik doe, of het nu met behulp van dubbele backslashes, forward slashes, of dubbele slashes in de locatie voor het ifstream object; ik krijg altijd kan niet bestand te vinden als de output.

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream accountsread(‪G:/Coding/Test/test/test/accounts.txt);
    if (accountsread.is_open()) {
        int tempAccno;
        std::string tempname;
        char tempchar;
        int accountsfound = 0;
        int input;

std::cout << Enter the ID of the account \n;
        cin >> x;

        while (!accountsread.eof()) {
            accountsread >> tempAccno;
            if (tempAccno == input) {
                accountsfound++;
            }
            else {}


        }
        if (accountsfound > 0) {
            cout << number found;
        }
        else {
            cout << number not found;
        }
    }
    else {
        cout << cannot find file;
    }
}

in windows, de locatie van het tekstbestand G: \ Coding \ Test \ test \ test \ accounts.txt

De vraag is gesteld op 03/12/2019 om 00:03
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

std::ifstreamkan relatieve paden evenals absolute degenen gebruiken. Voor uw probleem, zou ik adviseren op zoek naar de <filesystem>kop van de STL als je echt een absoluut pad naar uw bestand. Echter, als het in dezelfde map als je werkmap, die u niet nodig om absolute paden gebruiken. Hier is hoe ik je taak zou volbrengen

#include <iostream>
#include <fstream>
#include <string>  // Should include since you're using std::string

// Note that I am NOT "using namespace std;"

int main()
{
    std::ifstream accountsRead("accounts.txt");
    if (accountsRead.is_open())
    {
        int account_id;
        bool account_found = false;

        std::cout << "Enter the ID of the account: ";
        while (!(std::cin >> account_id))
        { // This loop handles if the user inputs non-number
            std::cout << "Please enter a NUMBER below!\n";
            std::cout << "Enter: ";
            std::cin.ignore(10000, '\n');
            std::cin.clear();
        }

        int tmpAccNum;
        while (accountsRead >> tmpAccNum)
        { // This loop reads the file, line by line, into tmpAccNum
            if (tmpAccNum == account_id)
            {
                account_found = true;
                break;
            }
        }

        if (account_found)
        {
            std::cout << "Number found!" << std::endl;
        }
        else
        {
            std::cout << "Number not found..." << std::endl;
        }
    }
    else
    { // Error opening file
        std::cout << "File not found or is corrupted" << std::endl;
    }
}

Een paar dingen over je code stilistisch spreken. Ten eerste moet je nooit using namespace std, en (als je om wat voor reden) is er geen reden om te mixen en matchen met vermelding van de stdnamespace op slechts enkele stdleden. Ten tweede, hoeft u niet nodig om een te specificeren elsevoor elke if-statement, en moet je waarschijnlijk niet, tenzij er in werkelijkheid zijn commando's uit te voeren als het elsegeval is bereikt.

Bewerk

Als u nog steeds een absoluut pad nodig hebben, hier is hoe je dat kunt doen:

#include <filesystem>

int main()
{
    // Create path object for the file path
    std::filesystem::path file_path("G:\Coding\Test\test\test\accounts.txt");

    // The '.string()' method for a 'std::path' object returns the string
    // version of the path, so you can use it with an 'std::ifstream'
    std::ifstream accounts(file_path.string());  // Opens file via 'ifstream'
    /* And so on... */
}

antwoordde op 03/12/2019 om 01:18
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more