注册 登录
编程论坛 C++教室

程序有问题么?

jack333fly 发布于 2010-07-19 13:56, 803 次点击
#include <fstream>
using namespace std;
int main()
{
    ifstream in_stream;
    ofstream out_stream;
    in_stream.open("1.txt");
    out_stream.open("2.txt");
    int first, second;
    in_stream >> first >> second;
    out_stream <<"The sum of these two numbers is:\n"
               << (first + second) << endl;
    in_stream.close();
    out_stream.close();
    return 0;
}
电脑桌面放着1.tet和2.txt,前者有数字1和2,后者是空的,但执行程序后没见2.texyou变化,不知是和情况,望高手指点~
8 回复
#2
rainbow12010-07-19 14:42
没有运行你的程序。但两个文件放在桌面路径不一定正确。你的程序保存在什么地方,你的文件应该放在什么地方。
#3
jack333fly2010-07-19 15:10
回复 2楼 rainbow1
哦~那程序的保存地方和文件的有关系么?具体是怎样的关系啊?
#4
rainbow12010-07-19 18:26
一般在你程序当中不指定要打开文件的路径时,只会在你程序所在的目录下寻找要打开的文件。除非你在程序当中加上要打开文件所在路径。为了省事,你把文件放在你程序所在的目录下就行了。
#5
飞天小丰2010-07-20 19:26
1.txt与2.txt位置可能放错了 他们应该放在你程序的目录文件夹下
#6
JINyuanbao2010-07-20 23:15
回复 楼主 jack333fly
你这样操作的后果是:在当前的工作目录下会得到一个文档2.txt
内容如下:
The sum of these two numbers is:
-1717986920

很大的负数是因为你没有给first 和second 两个变量初始化 。
并且没有读取到1.txt的数据赋值给变量。

你想做这样的操作的话。这里我贴出了一段代码以供参考:不足之处还请批评指教      
假设你1.txt的内容是
43 435

#include <fstream>
#include <string>

using namespace std;
int main()
{
    ifstream in("1.txt");      //文件必须存在
    string strLine;
    int first, second;
    while(getline(in,strLine))
    {   
        int lineLength = strLine.length();
        int j=0;
        string test[2];
        for(int i=0; i<lineLength; i++)
        {
            if(strLine[i]!=' ')
            {
                test[j] += strLine[i];

            }
            else
            {
                j ++;
            }
        }   
        first  = atoi(test[0].c_str());
        second = atoi(test[1].c_str());
    }

    ofstream out("2.txt");   //在没有文件的情况下会在当前目录下创建此文件
   
    out<<"The sum of these two numbers is:\n"
               << (first + second) << endl;

    return 0;
}
通过这段代码操作
2.txt内容如下
The sum of these two numbers is:
478

注意:我的是在vs2008下编译通过。

补充说明:如果你读取的是多行数据,你可以用数组或者stl来存取数据。这里就不展开了
就像如下数据的txt文件
N9.7,0.0,0.0    #    248,248,248
6.0GY,9.7,1.5    #    248,248,232
5.1GY,9.7,2.4    #    248,248,216
4.0GY,9.6,3.4    #    248,248,200
3.3GY,9.6,4.4    #    248,248,184
2.9GY,9.6,5.4    #    248,248,168
2.6GY,9.6,6.4    #    248,248,152
2.3GY,9.5,7.4    #    248,248,136
2.2GY,9.5,8.4    #    248,248,120
2.0GY,9.5,9.3    #    248,248,104
1.9GY,9.5,10.2    #    248,248,88
。。。。
#7
pangding2010-07-21 01:26
IO的注意事項一般都比较多。C++ 我很久不用了,而且好多东西也没学会,呵呵~~以下仅是一些建议。

有一些简单的问题可以避免的,比如打开流之后,一般可以用 is_open() 这个函数来查看流是否正确打开了。
比如像你这个,可以 in_stream.is_open() 来试一下,它返回 false,就是说那个流根本没打开。

没有必要用楼上的那个方法读数字,用流的话,一般就 int a; in >> a; 这样就行了。
如果担心输入文件有語法或格式上的问题。可以在读取之后测 goodbit 看是不是成功读取了。

总之有关IO方面是一个主题,相关的东西如果大量的不懂可以找书系统学,如果有小地方不会可以上网查一些细节。
#8
windyfzz2010-07-25 22:45
你可以设置路径,比如把1.txt,2.txt放在d盘。
则改为
    in_stream.open("d:\\1.txt");
    out_stream.open("d:\\2.txt");
如不设路径则必须保证1.txt,2.txt在当前目录下。
#9
saynotolx2010-07-26 17:23
顶顶顶顶顶!
1