程序不是在win上工作,而是在mac上工作。为什么?

时间:2011-06-21 09:22:44

标签: c++ windows-7 text-files

我的大学作业有问题。需要将文本从一行文本编辑为段落的程序,其中每行不超过80个符号。你只能在空格,'。',',等等之后进行换行。

这段代码在mac上运行正常,但它对我的win7不起作用。任何人都可以帮助我吗?

#include <fstream>
using namespace std;

int main() {
    int i=0;
    char symbol[80];
    fstream fin ("in.txt", ios::in);
    fstream fout ("out.txt", ios::out);
    fin.get(symbol[i]);
    while(!fin.eof()){
        if(symbol[i] == '\n' || i == 80) {
            while(symbol[i] != ' ' && symbol[i] != ',' && symbol[i] !='?' && symbol[i] != '.' && symbol[i] !='!' && symbol[i]!='(' && symbol[i] !=')'){
                i--;
                fin.seekg(-1, ios::cur);
            }
            for(int j=0;j<i;j++){
                fout.put(symbol[j]);
            }
            fout.put('\n');
            i = -1;

        }
        i++;
        fin.get(symbol[i]);
    }
    if (fin.eof()){
        for(int j=0;j<i;j++){
            fout.put(symbol[j]);
        }
    }
    fin.close();
    fout.close();
    return 0;
}

3 个答案:

答案 0 :(得分:3)

您没有指定“它不起作用”的方式,而且我没有研究过您的代码(看起来您没有花时间将其减少到重现问题所需的最小值,因此{ {3}})。考虑到你提到的平台,你很可能会遇到TL;DR

在Microsoft平台上,新行是回车(CR0x0D\r),后跟换行符LF0x0A\n)。你只是在寻找LF。

(据推测,一次一次,MicroSoft的磁盘操作系统在机械打字机上运行,​​操作员必须将托架返回到开头才能移动到下一行。)

答案 1 :(得分:0)

“fseek”和此代码中的其他几个部分是类似unix的操作。 Windows不是类似unix的机器(而Mac是)。

如果你在你的机器上安装了cygwin,它会添加这些,并且可能只是为你解决问题。

或者,你可能会遇到这个问题: http://cboard.cprogramming.com/c-programming/129839-fseek-broken-under-windows.html

我们都在这里猜测,因为你没有提供足够的信息让我们真正知道你真正遇到了什么问题。

答案 2 :(得分:0)

我在代码中看到的另一个问题(可能是也可能不是问题的原因): 如果在给定的行中你只有普通字符(没有空格,问题,感叹号等)会怎么样?

然后,如果我正确读取这个,你最内层的while循环将超出你的字符串的开头并开始处理一些垃圾。因此,您可能会错误地在文件流中进行搜索。