Я пытаюсь прочитать текстовый файл и сопоставить фрукты с тем, что у меня есть (например, я печатаю яблоко, и он будет искать текстовый файл для слова яблоко и сопоставлять его и выводить его, но я изо всех сил пытаюсь добиться результатов я хотел и, следовательно, нуждался в помощи в этом.
У меня есть текстовый файл (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;
}
}
пожалуйста, сообщите спасибо.
В цикле с 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
}
}
}
Начну с того, что я просто начинающий, как вы, взял ваш код и внес некоторые изменения, например:
Использованный "fstream" для чтения из файла до тех пор, пока он не является окончанием файла.
Затем, прочитывая каждую строку в струйном потоке, я могу затормозить ее позже, используя разделитель комы.
Я также использовал массив из двух измерений для хранения фруктов и количества каждого типа.
В конце концов мне пришлось искать массив для фруктов, которые я хотел отобразить.
Прежде чем опубликовать код, я хочу предупредить вас о том, что программа не будет работать, если более 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();
}
Надеюсь, вы что-то узнали из этого (я точно так и сделал).