Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 19:39   #1
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию Ввод и вывод инф. в файл

Есть текст док-нт "mix1" в нем в строчку записаны слова.
Задача: нужно чтоб программа считывала из файла "mix1.txt" символы когда встречала ( : ), сохраняла в файл "mix2.txt". В файле "mix2" слова должны сохранятся в столбик.
Си изучаю недели 2 поэтому сильно не ругайте.
Хотелось бы для себя хорошо понять решение этой задачи. Если не тяжело пишите код и через // пишите что он делает
Код:
int ch, counter = 1;
  FILE *f;
  FILE * f2;

  f=fopen("mix1.txt","r");
  f2=fopen("mix2.txt","w");
  
  while(counter <= 10)
  {
  fscanf(f,"%c,",&ch);
  fprintf(f2,"%c",ch);
  counter++;
}
  return 0;

}
этот код считывает 10 раз по 1ному символу из файла mix1 и записывает в файл mix2.
как сделать чтоб программа считывала из файла mix1 символы до знака ( : ), и записывала в файл mix2:??? (Нужно чтоб слова считаные из микс1 записывылаись в столбик в файле микс2)

Последний раз редактировалось loader159; 24.05.2010 в 20:43.
loader159 вне форума Ответить с цитированием
Старый 24.05.2010, 20:58   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
while(ch != ':')
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.05.2010, 22:16   #3
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Код:
while(ch != ':')
Угу я так делал но в файл микс2 копируются символы с двоеточием включительно.
Как сделать чтоб 2еточие не записовалось в файл микс2, и програма не завершалась покаместь не просканит файл микс1 до конца :?
loader159 вне форума Ответить с цитированием
Старый 25.05.2010, 02:00   #4
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

Код:
int ch = 0;
      FILE *f;
      FILE * f2;

      f=fopen("mix1.txt","r");
      f2=fopen("mix2.txt","w");
      
      while ((ch=getc(f))!=EOF)
            {
             if(ch!=':')
             {
             fscanf(f,"%c,",&ch);
             fprintf(f2,"%c",ch);
             }
             else
             {
                 fprintf(f2,"\n",ch);
                 }
             }
fclose(f);
fclose(f2);

return 0;

}
Чтоб программа сканила файл микс1 до конца я понял как сделать, а вот чтоб : заменялось на конец строки, чет не пойму. мб .. кто подскажет :?
loader159 вне форума Ответить с цитированием
Старый 25.05.2010, 09:43   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
fprintf(f2,"\n");
или
Код:
fprintf(f2,"\0");
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.05.2010, 14:01   #6
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

Код:
#include <stdlib.h>
#include <stdio.h>


main()
{
        FILE *i = fopen("mix1.txt","r");
        FILE *o = fopen("mix2.txt","w");
        int c;

        while ((c = getc(i))!=EOF)
        {
                if (c!=':')
                        putc(c,o);
                else
                        putc('\n',o);
        }

        fclose(i);
        fclose(o);

        return(0);
}
полностью рабочий код.
Можно сделать так чтоб из файла микс2(слова в столбик записаны) программа копировала 1 строчку 3 пропускала 5ю строчку 3 пропускала ну и т.д и сохраняла в файл микс3:????
loader159 вне форума Ответить с цитированием
Старый 25.05.2010, 18:38   #7
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

Код:
#include <stdlib.h>
#include <stdio.h>
main()
{

  
int ch;
  FILE *f;
  FILE * f2;

  f=fopen("mix2.txt","r");
  f2=fopen("mix3.txt","w");
  
               fscanf(f,"%s",&ch);
               fprintf(f2,"%s",ch);


  return 0;

}
Как я понял вот так программа читает 1символ
fscanf(f,"%с",&ch);

Вот так читает строку, до конца файла или до начала новой строки
fscanf(f,"%s",&ch);.

С етим кодом программа работает правильно.
Код:
fscanf(f,"%с",&ch);
fprintf(f2,"%с",ch);
С етим:
Код:
fscanf(f,"%s",&ch);
fprintf(f2,"%s",ch);
Компилица без ошибки, но когда запускаешь программу ошибка (память не может "read")
где ошибка : ?
loader159 вне форума Ответить с цитированием
Старый 25.05.2010, 20:01   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Чтобы читать/выводит строку, надо, чтобы переменная была строкой:
Код:
char* str1 = new char[10];
char str2[18] = "This is a string!"; //Не забываем про \0 в конце строки и строкового литерала
fscanf(f,"%s",str1);
fprintf(f2,"%s",str2);
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.05.2010, 22:25   #9
loader159
 
Регистрация: 24.05.2010
Сообщений: 8
По умолчанию

Код:
#include <stdlib.h>
#include <stdio.h>
main()
{
char *str1 = new char[10];
char str2[18] = "\n";
  FILE *f;
  FILE * f2;

  f=fopen("mix2.txt","r");
  f2=fopen("mix3.txt","w");
  
  
               fscanf(f,"%s",str1);
               fprintf(f2,"%s%s",str1,str2);



  return 0;

}
Задача решена. Рабочий код который читает сразу строку.
Спасибо большое Гром!

Последний раз редактировалось loader159; 25.05.2010 в 22:41.
loader159 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ввод/вывод данных из/в файл для данной программы? Tetramorf Общие вопросы C/C++ 0 14.05.2010 17:03
[C++] Вывод информации в СТРУКТУРЕ! Telec Общие вопросы C/C++ 11 21.01.2010 18:01
Удаление лишних пробелов. Ввод/вывод в файл. Иван 883 Помощь студентам 13 31.03.2009 19:39
Консольная программа на Си: ввод, вывод, сортировка, сохранение в текстовый файл. zerg Помощь студентам 8 16.11.2007 12:57