鱼C论坛

 找回密码
 立即注册
查看: 4133|回复: 12

c++一个小问题

[复制链接]
发表于 2013-7-30 17:18:47 | 显示全部楼层 |阅读模式
1鱼币
下面STU *stu=new STU[n]建立空间后
for(int a=0;a<n;a++)
         in>>stu[a].num>>stu[a].subject;
    cin>>num;
    for(int i=0;a<n;i++)
        if(num == stu[i].num)
cout<<"学号:"<<stu[i].num<<endl<<"科目:"<<stu[i].subject<<endl;
却显示不出来?
求解
-----------------------------------------------------------------代码----------------------------------------------------------
#include<iostream>
#include <fstream>
#include <string>
#include <string.h>
using namespace std;

typedef struct STU
{
    int num;
    string subject;
}STU;
void main()
{

//向文本文件中插入数据,我已经在文本中插入
/*
txt中:123  张三
           456
           789 李四
就是456的姓名是空的,然后我要用456去登陆,然后让指针指到456后面去,再为456添加姓名
*/

string number;
string name;
ofstream outstuf ;  
outstuf.open( "test.txt" , ios::app|ios::binary ) ;
if ( !outstuf )   
     { cerr << "文件不存在" << endl ;    abort();  }
cin>>number;
number=number+" ";
cin>>name;

outstuf.seekp(0,ios::end);   
outstuf<<number.c_str();
outstuf<<name.c_str()<<"\r\n";

outstuf.close();   


//检测文本的行数
int num;
ifstream in("test.txt",ios::in);
string line;
int n;
while(getline(in,line))
{  n++;}
n=n-1;

//建立空间,这里貌似也有点问题,不知道为什么下面的cout的内容显示不出来,能顺便看下么
STU *stu=new STU[n];  
    for(int a=0;a<n;a++)
        in>>stu[a].num>>stu[a].subject;
    cin>>num;
    for(int i=0;a<n;i++)
        if(num == stu[i].num)
cout<<"学号:"<<stu[i].num<<endl<<"科目:"<<stu[i].subject<<endl;
   delete []stu;

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-30 17:19:34 | 显示全部楼层
能用简单点的语句回答吗?我是新手:cry,最后能在原代码改下,刚学C++不久
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-30 17:52:39 | 显示全部楼层
int num;
ifstream in("test.txt",ios::in);
string line;
int n;
while(getline(in,line))
{  n++;}
这里执行完in已经指向文件尾了,再从in读数据肯定什么都读不到
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-30 20:22:56 | 显示全部楼层

为什么我cout<<n;能显示出n的数值。   要怎么修改。   用简单点的代码。   刚学- -。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-30 20:32:34 | 显示全部楼层

int num;
ifstream in("test.txt",ios::in);
string line;
int n;
while(getline(in,line))
{  n++;}
这个代码之后加上:
in.close();
ifstream in2("test.txt",ios::in);
后面不操作in,直接操作in2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-30 20:50:50 | 显示全部楼层
仰望天上的光 发表于 2013-7-30 20:32
int num;
ifstream in("test.txt",ios::in);
string line;

STU *stu=new STU[n];  
     for(int a=0;a<n;a++)
        in>>stu[a].num>>stu[a].subject;
    cin>>num;
    for(int i=0;a<n;i++)
        if(num == stu[i].num)
cout<<"学号:"<<stu[i].num<<endl<<"科目:"<<stu[i].subject<<endl;
   delete []stu;

我这里本来就没操作 in额 。加上了in2对STU *stu=new STU[n]; 有什么影响?求教
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-30 21:29:49 | 显示全部楼层
swlhyyh 发表于 2013-7-30 20:50
STU *stu=new STU[n];  
     for(int a=0;a>stu[a].num>>stu[a].subject;
    cin>>num;

//检测文本的行数
里面
while(getline(in,line))操作了in,其结果是:通过in把文件内容全部读完了
然后,在
STU *stu=new STU[n];  
     for(int a=0;a<n;a++)
        in>>stu[a].num>>stu[a].subject;
for循环里面继续操作已经没有实际内容的in,这里对in的操作将被全部视为空操作
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-30 21:48:15 | 显示全部楼层
仰望天上的光 发表于 2013-7-30 21:29
//检测文本的行数
里面
while(getline(in,line))操作了in,其结果是:通过in把文件内容全部读完了

但是
while(getline(in,line))
{  n++;}
n=n-1;
in.close();
ifstream in2("test.txt",ios::in);
for(int a=0;a<n;a++)
        in2>>stu[a].num>>stu[a].subject;

    cin>>num;



for(int i=0;a<n;i++)
if(num == stu[i].num)
cout<<"学号:"<<stu[i].num<<endl<<"科目:"<<stu[i].subject<<endl;
delete []stu;


我对in2操作  依然显示不出来,这次我是用in2去读内容  带还是无法显示出来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-31 10:35:58 | 显示全部楼层
while(getline(in,line))
{  n++;}
n=n-1;
in.close();
ifstream in2("test.txt",ios::in);
for(int a=0;a<n;a++)
        in2>>stu[a].num>>stu[a].subject;

    cin>>num;



for(int i=0;a<n;i++)
if(num == stu.num)
cout<<"学号:"<<stu.num<<endl<<"科目:"<<stu.subject<<endl;
delete []stu;
:cry为什么还是不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-31 10:39:05 | 显示全部楼层
:cry没人了么。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-31 17:35:15 | 显示全部楼层
仰望天上的光 发表于 2013-7-30 21:29
//检测文本的行数
里面
while(getline(in,line))操作了in,其结果是:通过in把文件内容全部读完了

:cry能在指点下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-31 18:46:45 | 显示全部楼层
swlhyyh 发表于 2013-7-31 17:35
能在指点下吗

一个文件有两行,如
aaa
bbb
这里只有9个字节(其中包含一个换行符)
用文件指针企图直接在aaa和bbb之间插入其它内容是不可能的,一定会把bbb覆盖掉(除非你只插入一个字符,即使这样,也会把换行给覆盖掉),所以一般的方法是把文件内容全部读到自己的数据结构里,修改数据结内容后,再把数据结构写到文件里。

至于程序,我已经给过你了。要自己实现查找输入的名字,只要把我写死的部分扫尾改下就可以了。如果说写得太难看不懂,那你也要告诉我你现在到底什么水平,是不是除了main以外不会写函数呢》是不是不知道运算符重载呢?是不是不会使用stl容器和算法呢?还是你学的C++根本就是把printf改为cout,scanf改为cin的C语言?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-31 19:50:20 | 显示全部楼层
仰望天上的光 发表于 2013-7-31 18:46
一个文件有两行,如
aaa
bbb

我只是刚入门不久  你写得很多函数我在书上没见过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 07:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表