Я пытаюсь написать программу на C, которая может фильтровать строки. Предполагается печатать только одну строку при наличии последовательных повторяющихся строк. Я должен использовать массивы символов для сравнения строк. Размеры массивов несущественны (для проекта установлено 79 символов). Я инициализировал массивы так:
char newArray [MAXCHARS];
char oldArray [MAXCHARS];
и заполнил массив с помощью этого цикла for, чтобы проверить наличие новых строк и конца файла:
for(i = 0; i<MAXCHARS;i++){
if((newChar = getc(ifp)) != EOF){
if(newChar != '/n'){
oldArray[i] = newChar;
oldCount++;
}
else if(newChar == '/n'){
oldArray[i] = newChar;
oldCount++;
break;
}
}
else{
endOf = true;
break;
}
}
Для циклического перехода по следующей строке (строкам) и поиска дубликатов я использую цикл while, который изначально установлен в значение true. Он заполняет следующий массив до новой строки и тестирует на EOF. Затем я использую два цикла for для проверки массивов. Если они одинаковы в каждой позиции в массивах, дубликат остается неизменным и ничего не печатается. Если они не совпадают, для параметра duplicate устанавливается значение false, и вызывается функция (testArrays) для печати содержимого каждого массива.
while(duplicate){
newCount = 0;
/* fill second array, test for newlines and EOF*/
for(i =0; i< MAXCHARS; i++){
if((newChar = getc(ifp)) != EOF){
if(newChar != '/n'){
newArray[i] = newChar;
newCount++;
}
else if(newChar == '/n'){
newArray[i] = newChar;
newCount++;
break;
}
}
else{
endOf = true;
break;
}
}
/* test arrays against each other to spot duplicate lines*
if they are duplicates, continue the while loop getting new
arrays of characters in newArray until these tests fail*/
for(i =0; i< oldCount; i++){
if(oldArray[i] == newArray[i]){
continue;
}
else{
duplicate = false;
break;
}
}
for(i =0; i <newCount; i++){
if(oldArray[i] == newArray[i]){
continue;
}
else{
duplicate = false;
break;
}
}
if(endOf && duplicate){
testArray(oldArray);
break;
}
}
if((endOf && !duplicate) || (!endOf && !duplicate)){
testArray(oldArray);
testArray(newArray);
}
Я считаю, что это не работает, и в любом случае печатаются последовательные идентичные строки. Я не могу понять, как это могло случиться. Я знаю, что это большой код, который нужно пройти, но он довольно прост, и я думаю, что другой взгляд на это легко обнаружит проблему. Спасибо за помощь.