C++ 结构未正确读取C++;代码::Blocks 13.12

C++ 结构未正确读取C++;代码::Blocks 13.12,c++,struct,codeblocks,C++,Struct,Codeblocks,我有一个问题,我必须从n书籍中读取数据:标题、作者、价格(变量pret),拷贝数(变量nr)。变量val表示书籍的“价值”,即价格*份数 我们在学校只使用数组,而不是字符串向量,因此我们所有的问题都有固定大小的字符串。我们正在读取的文件示例: 3 Ion Liviu Rebreanu 100 10 Mara Ioan Slavici 50 3 Poezii Mihai Eminescu 60 20 我需要打印出每本书的阅读数据以及它的“价值”。之后我还需要打印出价值最高的书籍数据。我在代码::

我有一个问题,我必须从
n
书籍中读取数据:标题、作者、价格(变量
pret
),拷贝数(变量
nr
)。变量
val
表示书籍的“价值”,即价格*份数

我们在学校只使用数组,而不是字符串向量,因此我们所有的问题都有固定大小的字符串。我们正在读取的文件示例:

3
Ion
Liviu Rebreanu
100
10
Mara
Ioan Slavici
50
3
Poezii
Mihai Eminescu
60
20
我需要打印出每本书的阅读数据以及它的“价值”。之后我还需要打印出价值最高的书籍数据。我在代码::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;
}
#包括
#包括
#包括
使用名称空间std;
结构点菜
{
chart[50],a[50];
内部预处理,nr,val;
}v[100];
int main()
{
int n,i,maxx=0,x,j;
ifstream fin(“carte.txt”);
fin>>n;
fin.get();

对于(i=1;i在计算总拷贝数(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;

}
#包括
#包括
#包括
使用名称空间std;
结构点菜
{
chart[50],a[50];
内部预处理,nr,val;
}v[100];
int main()
{
int n,i,maxx=0,x,j;
ifstream fin(“carte.txt”);
fin>>n;
fin.get();

难道我没有投反对票,因为你在写可读代码时没有付出任何努力;特别是你的缩进太糟糕了。你的限制是什么?你为什么不使用
std::string
而不是字符数组和
std::vector
而不是C样式数组?字符字段真的是作为补丁写在文件中吗d大小的字符串?这对于文本文件来说非常罕见。你能举例说明文件的外观吗?@JakeWright你可能在结构中有固定大小的字符串,但它们在文件中是固定大小的吗?把它放在问题中,而不是注释中。 Read: 3 Title, Author, Price, Copies Ion,Liviu Rebreanu,100,10 Mara,Ioan Slavici,50,3 Poezii,Mihai Eminescu,60,20 Output: Ion Liviu Rebreanu 100 10 1000 Mara Ioan Slavici 50 3 150 Poezii Mihai Eminescu 60 20 1200 Poezii