| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1269 人关注过本帖
标题:请教C++的文本文件输入问题
只看楼主 加入收藏
flyingba
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-16
收藏
 问题点数:0 回复次数:10 
请教C++的文本文件输入问题

有一数据文本文件,有若干行,每行数据个数不同,只要每行前2个数据,该如何编程?


比如,有数据文本文件a.txt,内容如下:

1.0 2.0 3.0 4.0 5.0
1.0 2.0
1.0 2.0 3.0 4.0
1.0 2.0 3.0

只要每行前2个数据.

这个问题如果用Pascal就很简单,用readln语句即可,但C++无readln语句,如何办?

搜索更多相关主题的帖子: 文本文件 数据 每行 readln 
2006-08-16 12:30
flyingba
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-16
收藏
得分:0 
请教各位大虾
2006-08-16 12:33
funnyt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-8-15
收藏
得分:0 

用fin.getline()读取一行

再取一行前两个数

应该可以的

2006-08-16 23:53
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream ins("1.txt");
    char ch[50],ch1[20],ch2[20];
    while (!ins.eof()) {
        ins.getline(ch,60);
        strncpy(ch1,ch,((string)ch).find(' '));
        double num1=atof(ch1);
        memset(ch,' ',((string)ch).find(' '));
        int l=(int)((string)ch).find_first_not_of(' ');
        memset(ch,'*',l);
        int L=(int)((string)ch).find(' ');
        
        for (int i=0,j=l;i<L-l;j++)
            if (ch[j]!=' '&&ch[j]!='*') {
                ch2[i]=ch[j];
                i++;
            }
        double num2=atof(ch2);
        cout<<num1<<"  "<<num2<<endl;
    }
    return 0;
}

正个过程放进while(!fin.eof())循环里。。。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-17 08:52
flyingba
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-16
收藏
得分:0 
to:wfpb


谢谢.

但太复杂了,没想到Pascal的非常简单的readln语句,C++中要如此复杂.

Anyway,非常感谢!!!
2006-08-17 12:14
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
[QUOTE]#include<iostream>
#include<fstream>
using namespace std;

int main()
{
ifstream fin("1.txt");
char ch;
double d;
int i=0;

while(fin.get(ch))
{
if(i!=2)
{
fin.putback(ch);
fin>>d;
cout<<d<<' ';
i++;
}
else if(ch=='\n')
i=0;
}

system("pause");
return 0;
}[/QUOTE]

如果每行至少有2个数


2006-08-17 13:08
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
to woodhead:
  你的方法不错。就是不知道fin.putback(ch);的意思。看不大懂MSDN的意思

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-17 17:09
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
就是把ch放回缓冲区,下次读取就从这个ch开始,cin和默认的文件流都是有缓冲的,
也可以使用peek(),查看下一个缓冲的字符,下一次读取仍然从这个字符开始。

2006-08-17 18:23
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
哦,谢谢了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-17 20:38
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
哦,谢谢了

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-17 20:38
快速回复:请教C++的文本文件输入问题
数据加载中...
 
   



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

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