| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 333 人关注过本帖
标题:文件读取姓名操作出现问题
只看楼主 加入收藏
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
结帖率:95%
收藏
已结贴  问题点数:20 回复次数:2 
文件读取姓名操作出现问题
程序代码:
string a;
getline(cin, a);

为什么要输入2次回车,才结束。怎样才能输入一次回车结束,避免用户不知道这情况!

大问题。我结构体里2个string成员, 用getline读取姓名这种有空格的字符串,文件流出现问题。普通无空格用cin的没问题,希望大家能帮帮我,我弄了很久无法解决。顺带问下,从文件中读取数字,是如何实现的。是想用字符串读取内容,再转换为数值?
程序代码:
// Note:Your choice is C++ IDE
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;

struct cmd
{
    string a;
    string b;
    friend ostream& operator << (ostream &os, const cmd& t);
    friend istream& operator >> (istream &is, cmd& t);
};

ostream& operator << (ostream &os, const cmd& t)
{
    //cin.sync();
    os<<t.a<<'\t'<<t.b;
    return os;
}

istream& operator >> (istream &is, cmd& t)
{
    //is>>t.a>>t.b>>t.c;
    //cin.sync();
    getline(is, t.a);
    getchar();
    getline(is, t.b);
    return is;
}

int main()
{
    cmd a[2];
    cmd b;
    vector<cmd> obj;
   
    ofstream outfile("g:\\ct.txt", ios_base::app | ios_base::out);
    for(int i = 0 ; i != 2; ++i)
    {
        cin>>a[i];
        outfile<<a[i]<<endl;
    }
   
    outfile.close();
    outfile.clear();
   
    ifstream infile("g:\\ct.txt");
    while(!infile.eof())
    {
        infile>>b;
        obj.push_back(b);
        cout<<b<<endl;
    }
   
    for(vector<cmd>::iterator iter = obj.begin(); iter != obj.end(); ++iter)
    {
        cout<<*iter<<endl;
    }
   
    infile.close();
       
    return 0;
}



[ 本帖最后由 最近不在 于 2010-7-13 09:05 编辑 ]
搜索更多相关主题的帖子: 结构体 字符串 姓名 如何 用户 
2010-07-13 08:58
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
这个跟具体的库实现有关。
vc6下,getline在读取一行输入时,如果没遇到文件结尾标志,或已经到最大行字符数,仅输入'\n'它并不立即返回.它需要遇到指定的'定界符'才返回.

如:
string strName
getline(cin,strName,'\\ ').
遇到'\\'才返回。

istream& operator >> (istream &is, cmd& t)
{
    //is>>t.a>>t.b>>t.c;
    //cin.sync();
    getline(is, t.a);
    getchar();          //这个没必要吧
    getline(is, t.b);
    return is;
}


[ 本帖最后由 东海一鱼 于 2010-7-13 11:47 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-07-13 11:45
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
回复 2楼 东海一鱼
太感谢你了,书上都没写getline这种用法。原来是第一个小问题,造成了第二个大问题,一语道破。
2010-07-13 13:27
快速回复:文件读取姓名操作出现问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055400 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved