Программа не работает на Win, но работает на Mac. Зачем? - PullRequest
0 голосов
/ 21 июня 2011

У меня проблема с домашним заданием в университете.Программа, которая должна редактировать текст из одной строки текста в абзац, где в каждой строке не более 80 символовВы можете сделать разрыв строки только после пробела, '.', ',' И т.д.Кто-нибудь может мне помочь?

#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 ]

3 голосов
/ 21 июня 2011

Вы не указываете, как «это не работает», и я не изучал ваш код (похоже, вы не нашли время, чтобы сократить его до минимума, необходимого для воспроизведения вашей проблемы, поэтому TL; DR ).Возможно, вы столкнулись с проблемой Newline , учитывая платформы, о которых вы упомянули.

На платформах Microsoft новой строкой является возврат каретки (CR, 0x0D или \r) с последующим переводом строки (LF, 0x0A или \n).Вы ищете только LF.

(Предположительно, однажды, Дисковая операционная система MicroSoft работала на механических пишущих машинках, и оператору пришлось бы возвращать каретку в начало, прежде чем перейти к следующейлиния).

0 голосов
/ 21 июня 2011

Другая проблема, которую я вижу в коде (которая может быть, а может и не быть причиной проблемы): Что если в данной строке есть только нормальные символы (без пробелов, вопросов, восклицательных знаков и т. Д.)?

Тогда, если я правильно читаю, ваш внутренний цикл while выйдет за пределы начала вашей строки и начнет обрабатывать некоторый мусор. Кроме того, в результате вы можете неправильно искать в потоке файлов.

0 голосов
/ 21 июня 2011

"fseek" и несколько других фрагментов в этом коде являются операциями, подобными Unix. Windows не является Unix-подобной машиной (в то время как Mac является).

Если вы установите Cygwin на свой компьютер, он добавит их и может решить вашу проблему за вас.

Кроме того, вы можете страдать от этой проблемы: http://cboard.cprogramming.com/c-programming/129839-fseek-broken-under-windows.html

Однако мы все здесь догадываемся, поскольку вы не предоставили достаточно информации, чтобы мы знали, с какой проблемой вы действительно столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...