我的大学作业有问题。需要将文本从一行文本编辑为段落的程序,其中每行不超过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;
}
答案 0 :(得分:3)
您没有指定“它不起作用”的方式,而且我没有研究过您的代码(看起来您没有花时间将其减少到重现问题所需的最小值,因此{ {3}})。考虑到你提到的平台,你很可能会遇到TL;DR。
在Microsoft平台上,新行是回车(CR
,0x0D
或\r
),后跟换行符LF
,0x0A
或\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循环将超出你的字符串的开头并开始处理一些垃圾。因此,您可能会错误地在文件流中进行搜索。