Структура не читает правильно C++ Code::Blocks 13.12
У меня есть эта проблема, где я должен читать данные из n
книги: название, автор, цена (pret
переменная), количество копий (nr
переменная). Переменная val
представляет "ценность" книги, которая является ценой * количество копий.
В школе мы используем только массивы, а не векторы строк, поэтому во всех наших задачах есть строки фиксированного размера. Пример файла, из которого мы читаем:
3
Ion
Liviu Rebreanu
100
10
Mara
Ioan Slavici
50
3
Poezii
Mihai Eminescu
60
20
Мне нужно распечатать данные, прочитанные для каждой книги, а также ее "ценность". И мне также нужно распечатать данные книги с самым высоким значением впоследствии. Я работаю в Code::Blocks 13.12, потому что это школьное задание. Я понятия не имею, почему, но он читает только данные для моей первой книги. Таким образом, после этого чтения он печатает много глупостей. Что с этим не так?
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
struct carte
{
char t[50], a[50];
int pret, nr, val;
} v[100];
int main()
{
int n, i, maxx=0, x, j;
ifstream fin ("carte.txt");
fin>>n;
fin.get();
for (i=1; i<=n; i++)
{
fin.get(v[i].t, 50); cout<<v[i].t<<" ";
fin.get();
fin.get(v[i].a, 50);
fin.get(); cout<<v[i].a<<" ";
fin>>v[i].pret>>v[i].nr; cout<<v[i].pret<<" "<<v[i].nr<<endl;
v[i].val=v[i].pret*v[i].nr;
if(v[i].val>maxx)
{
maxx=v[i].val;
x=i;
}
}
for(i=1; i<=n; i++)
{
cout<<v[i].t<<" "<<v[i].a<<" "<<v[i].pret;
cout<<" "<<v[i].nr<<" "<<v[i].val<<endl;
}
cout<<v[x].t<<endl;
return 0;
}
1 ответ
Перед тем, как вычислить общее количество копий (pret * nr), вы должны сделать дополнительный вызов fin.get(), чтобы разобраться с тем, что я считаю возвратом каретки. Я заметил это после того, как немного переформатировал код, чтобы показать вывод в виде строки, разделенной запятыми, или csv.
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
struct carte
{
char t[50], a[50];
int pret, nr, val;
} v[100];
int main()
{
int n, i, maxx=0, x, j;
ifstream fin ("carte.txt");
fin>>n;
fin.get();
cout << "Read: " << n << endl;
cout << "Title, Author, Price, Copies" << endl;
for (i=1; i<=n; i++) {
fin.get(v[i].t, 50); cout<<v[i].t<<",";
fin.get();
fin.get(v[i].a, 50);
fin.get(); cout<<v[i].a<<",";
fin>>v[i].pret>>v[i].nr; cout<<v[i].pret<<","<<v[i].nr<<endl;
fin.get();
v[i].val=v[i].pret*v[i].nr;
if(v[i].val>maxx) {
maxx=v[i].val;
x=i;
}
}
cout << "Output: " << endl;
for(i=1; i<=n; i++) {
cout<<v[i].t<<" "<<v[i].a<<" "<<v[i].pret;
cout<<" "<<v[i].nr<<" "<<v[i].val<<endl;
}
cout<<v[x].t<<endl;
return 0;
}
Читать: 3 Название, Автор, Цена, Копии Ион, Ливиу Ребреану, 100,10 Мара, Иоан Славичи,50,3 Poezii, Михай Эминеску,60,20 Выход: Ион Ливиу Ребряну 100 10 1000 Мара Иоан Славичи 50 3 150 Поэзия Михай Эминеску 60 20 1200 поэзии