C ++. как читать из файла и сопоставлять с вводом

0

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

У меня есть текстовый файл (fruit.txt) с содержимым, показанным ниже.

яблоко, 30

банан, 20

груша, 10


это мой код

string fruit;
string amount;
string line = " ";
ifstream readFile("fruit.txt");
fstream fin;

cout << "Enter A fruit: ";
cin >> fruit;

fin >> fruit >> amount;
while (getline(readFile, line,','))
    {
        if(fruit != line) {
            cout <<"the fruit that you type is not found.";
        }

       else {
           cout <<"fruit found! "<< fruit;
       }
}

пожалуйста, сообщите спасибо.

Теги:
c++11
visual-c++

2 ответа

0
Лучший ответ

В цикле с getline вы читаете "apple" в line первый цикл, а "30\nbanana" в line второй раз и т.д.

Вместо этого прочитайте всю строку (используя getline), а затем используйте, например, std::istringstream чтобы извлечь фрукты и количество.

Что-то вроде:

std::string line;
while (std:::getline(readFile, line))
{
    std::istringstream iss(line);

    std::string fruit;
    if (std::getline(iss, fruit, ','))
    {
        // Have a fruit, get amount
        int amount;
        if (iss >> amount)
        {
            // Have both fruit and amount
        }
    }
}
  • 0
    хорошо, я попробую спасибо большое
0

Начну с того, что я просто начинающий, как вы, взял ваш код и внес некоторые изменения, например:

  1. Использованный "fstream" для чтения из файла до тех пор, пока он не является окончанием файла.

  2. Затем, прочитывая каждую строку в струйном потоке, я могу затормозить ее позже, используя разделитель комы.

  3. Я также использовал массив из двух измерений для хранения фруктов и количества каждого типа.

  4. В конце концов мне пришлось искать массив для фруктов, которые я хотел отобразить.

Прежде чем опубликовать код, я хочу предупредить вас о том, что программа не будет работать, если более 20 фруктов имеют более одного свойства (в данном случае сумму). Здесь код:

#include <sstream>
#include <fstream>
#include <iostream>
#include <stdio.h>
using namespace std;

void main  (void)
{
    fstream readFile("fruit.txt");
    string fruit,amount,line;
    bool found = false;
    string fruitArray[20][2];

    cout << "Enter A fruit: ";
    cin >> fruit;

    while (!readFile.eof())
    {
        int y =0 ;
        int x =0 ;
        getline(readFile,line);
        stringstream ss(line);
        string tempFruit;
        while (getline(ss,tempFruit,','))
        {
            fruitArray[x][y] = tempFruit;
            y++;
        }
        x++;
    }

    for (int i = 0; i < 20; i++)
    {
        for (int ii = 0; ii < 2; ii++)
        {
            string test = fruitArray[i][ii] ;
            if  (test == fruit)
            { 
                amount = fruitArray[i][ii+1];
                found = true;
                break;
            } 
            else{
                cout <<"Searching" << '\n';
            } 
        }
        if (found){
            cout << "Found: " << fruit << ". Amount:" << amount << endl;
            break;
        }
    }
    cout << "Press any key to exit he program.";
    getchar();
}

Надеюсь, вы что-то узнали из этого (я точно так и сделал).

  • 0
    хорошо, спасибо большое

Ещё вопросы

Сообщество Overcoder
Наверх
Меню