0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 29
1

Работа с файлами. Вывод нечетных строк с указанием номеров строк

20.04.2013, 23:42. Показов 3485. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include "stdlib.h"
#include <stdio.h>
#include <locale>
#include <iostream>
using namespace std;
 
 
int main(int argc,char *argv[])
{setlocale (LC_ALL,"Russian");
FILE *fn;
char c;
 
/*if(argc==1)
    {printf("\n Не указано имя файла\n");
    exit(1);
    }*/
fn=fopen("c:\\ukazat.txt","r"); /*Открываем файл на чтение, как текстовый. argv[1] указывает на строку с именем файла*/
 
if (fn==NULL)
    {printf("\nФайл не найден\n");
    exit(1);
    }
 
int i=1;
 
while((c=fgetc(fn))!=EOF) /*Чтение символа из потока*/
    {if (c=='\n')
        cout<<"\rСтрока "<<i++<<'\t';
        cout<<c;    /*Вывод символа на экран*/
            
    }
fclose(fn); /*Закрытие файла*/
printf("\n\n\n");
return 0;
}
Тут проблема с выводом: хочу, чтобы в начале был номер строки, а потом строка. Но, если так делаю, то "строка" пишется поверх текста из файла.
Как я понимаю, для того, чтобы разделить строки на четные/нечтные, надо создать массивы каждой строки из отдельных символов. Как это сделать?

C++
1
2
3
4
5
6
7
8
9
10
11
    while((c=fgetc(fn))!=EOF) /*Чтение символа из потока*/
        {if (c=='\n')
        i++; //Считаем, сколько строк в файле
    }
 
for (n=1;n<i;n++)   
{while(c!='\n')
            {str=str+c;
            cout<<"str="<<str;
            }
        }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2013, 23:42
Ответы с готовыми решениями:

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

Работа с файлами. Удаление и редактирование строк в бинарном файле
Имеется вот такое задание: Дан файл, содержащий сведения о вступительных экзаменах в ВУЗ по...

Найти сумму наименьших элементов нечетных строк и наибольших элементов четных строк матрицы
Дана матрица размером 6 x 6. Найти сумму наименьших элементов ее нечетных строк и наибольших...

Если в файле содержится менее десяти строк, должен осуществляться простой вывод строк
Всем доброго времени суток, не могли бы вы мне помочь с написанием программы: Программе задаётся...

2
...
1804 / 1268 / 935
Регистрация: 12.02.2013
Сообщений: 2,063
21.04.2013, 08:42 2
Лучший ответ Сообщение было отмечено AlenaShch как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   FILE* fn;
 
   fn = fopen("ukazat.txt", "r");
 
   if (fn == NULL)
   {
      printf("Файл не найден\n");
      return 1;
   }
 
   int c;
   int i = 1;
   int newline = 1;
 
   while ((c = fgetc(fn)) != EOF)
   {
      if (i % 2 == 1)
      {
         if (newline)
         {
            printf("%02d | ", i);
         }
 
         printf("%c", c);
      }
 
      newline = (c == '\n');
 
      if (newline)
      {
         i++;
      }
   }
 
   fclose(fn);
 
   printf("\n");
 
   system("pause");
 
   return 0;
}
1
0 / 0 / 0
Регистрация: 06.10.2012
Сообщений: 29
21.04.2013, 21:07  [ТС] 3
Спасибо большое!!!
Можете немного пояснить?
1) почему если вместно newline я пишу c=='/n', то нумерация строк выдается справа от самих строк?
т.е. вместо
C++
1
2
3
4
5
6
7
8
9
10
11
 if (newline)
         {
            printf("%02d | ", i);
         }
 
         printf("%c", c);
      }
 
      newline = (c == '\n');
 
      if (newline)
пишу:
C++
1
2
3
4
5
6
 if (c == '\n')
         {printf("%02d | ", i);
         }
          printf("%c", c);
      }
      if (c == '\n')
2) Как я понимаю, newline принимает значения 1 или 0. Т.е можно задать тип bool?

3) Почему строку
C++
1
newline=(c=='\n');
нельзя поместить перед if(newline):
C++
1
2
3
4
{if(i%2!=0)
    {if(newline)
               cout<<"Строка "<<i<<":";
    printf("%c", c);}
Т.е., сначала сказать, что такое newline, а потом писать это уже в условии?

4) Почему нельзя
C++
1
2
if (newline)
    i++;
поместить сюда и сделать:
C++
1
2
3
4
5
6
    {if(i%2!=0)
        {if(newline)
            {i++;
            cout<<"Строка "<<i<<":";}
        printf("%c", c);
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2013, 21:07
Помогаю со студенческими работами здесь

Вывести массив номеров строк и массив номеров столбцов, все элементы которых равны только 1 или только 0
Задан размер квадратной матрицы и значения ее элементов (0 или 1). Сформировать и вывести массив...

Найдите два наибольших элемента матрицы с указанием номеров строк и столбцов, в которых они находятся
Дана матрица A порядка n. Найдите два наибольших элемента матрицы с указанием номеров строк и...

Найти минимальный и максимальный элемент матрицы и вывести его на экран с указанием номеров их строк и столбцов.
Найти минимальный и максимальный элемент матрицы и вывести его на экран с указанием номеров их...

Вывод 10 строк из бд, с указанием начала
Хочу сделать, что бы новости выводились по 10 на страницу. Как сделать это? mysql_query(&quot;SELECT *...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru