Дано: пустой квадрат из "x" в текстовом файле. Найти сторону квадрата и вывести её на экран - C (СИ)
Формулировка задачи:
Здравствуйте, помогите пожалуйста. Мне нужно решить эту задачу. Заранее спасибо.
Решение задачи: «Дано: пустой квадрат из "x" в текстовом файле. Найти сторону квадрата и вывести её на экран»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int i;
FILE * fp;
char * line = NULL;
char *p, *d;
size_t len = 0;
fp = fopen("text.txt", "r");
if(fp == NULL)
exit(EXIT_FAILURE);
for(i = 0;(getline(&line, &len, fp)) != -1; i++) {
if(strstr(line, "xxx") != NULL) {
getline(&line, &len, fp);
p = strchr(line, (int)'x');
d = strrchr(line, (int)'x');
printf("%s %d x", "Размер квадрата в попугаях: ", (int)(d - p + 1));
break;
}
}
for(i=0;(getline(&line, &len, fp)) != -1; i++) {
if(strstr(line, "xxx") != NULL) {
printf(" %d\n", i+3);
break;
}
}
if(line)
free(line);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Объединение этих двух фрагментов кода с помощью оператора
||будет работать некорректно, потому что каждый из них использует разные переменные и выполняет различные операции. - В первой части кода ищется строка
xxxв файле, и если она найдена, то программа выводит размер квадрата, вычисленный как разность между двумя индексамиx. - Во второй части кода ищется строка
xxxв файле, и если она найдена, то программа выводит номер строки, где эта строка была найдена. - Этот код будет работать правильно только в том случае, если все утверждения и проверки верны:
- Файл
text.txtсуществует в текущем каталоге и может быть прочитан. - Файл
text.txtсодержит хотя бы одну строку сxxx. - Строки с
xxxне пересекаются и не находятся на одной и той же строке. - Строки с
xxxне находятся в начале или конце файла. - Форматы ввода и вывода не вызывают переполнения или других проблем.
- Код не выполняется в многопоточной среде.
- Нет других скрытых ограничений, которые могут повлиять на выполнение кода.
- Файл