2010-03-06 1 views
0

В основном у меня возникают проблемы с моим кодом - это домашнее задание, поэтому не стоит публиковать его здесь по понятным причинам. Если для меня будет действительно важно сделать это, тогда мне придется, поскольку я так застрял.fgets - опускает последнюю строку в c

я читаю 2 текстовых файлов, а также имеет сепаратор, эти значения получены из командной строки, просто предположим, что разделитель в этом случае хх

File a 
a 
b 
c 


File b 
d 
e 

Output should be 
axxd 
bxxe 
cxx 

проблема в том, что мой код просто Безразлично «т сделать последнюю строку правильно

я получить выход

axxd 
bxxe 

Я надеюсь, что вы, ребята, можете собрать то, что я делаю неправильно без меня размещения всего моего кода, но моя логика о работе n этот принцип;

while not at the end of the file for files a and b 
    get a line using fgets from a 
    create a character pointer and set it to the first occurrence of \n in the line using strchr 
    if the pointer isn't null 
     set the pointers value to be the end of line 

get the line from b as above 
and now write the line from a, the separator and the line from b to file 
+1

показать минимальный образец кода C, с которым у вас возникла проблема: –

+0

Almsot невозможно, из-за того, что его всего 8 строк кода: S – Biscuit128

+1

Вы не хотите размещать 8 строк кода? Что-то, использующее while() и fgets(), является вопросом максимальной безопасности? –

ответ

3

Это ваша первая логическая задача: while(!feof(a) && !feof(b))

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

+0

спасибо, что дает мне soomthign работать, однако первое означает, что вы нашли больше : S !! – Biscuit128

+0

Хорошо старый флаг EOF. Они должны включить в документацию «НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ ДЛЯ ИСПЫТАНИЙ, ЧТО ВЫ МОЖЕТЕ ПРОЧИТАТЬ БОЛЬШЕ», тогда, возможно, люди будут держаться подальше от нее. – Tronic

+0

Ну, если вы просто измените условие while и оставьте код в его нынешнем виде, вы будете пытаться вызвать 'fgets' в потоках, которые потенциально находятся в' EOF'. Вам нужно проверить возвращаемое значение 'fgets', чтобы убедиться, что вы не обрабатываете содержимое старого буфера в качестве вновь прочитанных данных. –

0

Возможно, вы не распечатываете новую строку после печати последней строки? Тогда он может вообще не отображаться на вашем экране. Обратите внимание, что fgets только ставит новую строку в вашем буфере, если исходная строка имеет одну и последнюю строку файла.