2016-02-17 3 views
-1

Я пытаюсь получить доступ к следующей строке, используя fgets, чтобы подсчитать количество строк, похожих на следующую, есть ли все-таки, чтобы получить следующую переменную?Сравнение текущей строки с следующей с помощью fgets?

int similar = 0; 
 
char line[100]; 
 
char nextLine[100]; 
 
FILE *f = fopen(file, "r"); 
 
while (fgets(line, 100, f)) { 
 
      if (strcmp(nextLine, line) == '0') { 
 
         similar++; 
 
      } 
 
}

+2

Имеете ли вы, что это то же самое, что и по сравнению с * предыдущей * линией? –

+0

Не используйте имена всех прописных букв для чего-либо еще, кроме макросов или enum-констант. – Olaf

ответ

2

Это возможно - добавить новый вар next_line. Например,

int similar = 0; 
char line[100] = ""; 
char next_line[100] = ""; 

FILE *f = fopen(file, "r"); 
while (fgets(line, 100, f)) { 
    if (strcmp(next_line, line) == 0) { 
      similar++; 
    } 
    strcpy(next_line, line); 
} 

Примечание:

  • Вы должны проверить strcmp с 0, не '0'
  • Это работает только для сравнения соседних линий.
+0

Если ваша первая строка пуста, вы получите ложный результат. –

+0

Не было бы быстрее просто поменять указатели на две линии? –

+0

@EugeneSh. этот случай не является ложным положительным - помните ли вы, что «fgets» добавляют новую строку? – artm

0

Сравнить текущую строку с предыдущей строкой или сравнивать текущую строку с определенной строкой:
Ex. Мой текстовый файл содержит этот текст:

This is a line // (\n)
This is a line // (\n)
This is a line // without newline

char line_comp [] = "This is a line\n"; // For lines with newline 
char line_comp2 [] = "This is a line"; // For lines without newline 
char line[255];       // Store the line 

Теперь мы можем пройти через файл и посмотреть, если строки соответствует одному из перечисленных выше:

int equal = 0; 
while (fgets(line, 255, f) != NULL) { 
    if (strcmp(line, line_comp) == 0 || strcmp(line, line_comp2) == 0) 
     ++equal; 
} 

И затем окончательно напечатайте результат: printf("Lines equal: %d\n", equal);
Не забудьте проверить, правильно ли был открыт файл, и не забудьте закрыть файл после использования.