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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 20:40   #1
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию Запись и чтение файлов

Доброе время суток. Нужен совет знающих людей.
Программа создает 2-а файла (one two). Вводимые данные записываются в файл one и потом преобразуя (М), записываются в файл two. Все бы хорошо, но меня смущают две буквы ЯЯ. Я ввожу 5-ть строк, а ЯЯ выводятся 6-й строкой. Подскажите как с этим бороться. Как я представляю это мусор выводимый на экран.
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define n 5

main()
{
char temp[20], ch, s;
int i;
FILE *pf, *pr;
system("chcp 1251 > nul");
	 pf = fopen("one.txt", "wt");
	 system("cls");

	 printf("\n *********************\n");
	 printf(" * Ввести 5-ть строк *\n");
	 printf(" *********************\n\n");	 
for(i=0; i<n; i++)
{
 	 gets(temp);
	 fprintf(pf,"%s\n", temp);
}
 	 fclose(pf);
 	 printf("\n Строки записаны в файл 'one.txt'\n");

printf("\n ************************************************************************\n"); 	 
printf(" Поменять строчные 'м' на прописные 'М' и записать в файл 'two.txt'(Y/N): "); scanf("%c", &s);

if(s == 'y' || s == 'Y')
{
 	 system("cls");
	 fflush(stdin);
 	 printf("\n ******************************");
 	 printf("\n * Содержимое файла 'two.txt' *");
 	 printf("\n ******************************\n\n");
	 pf = fopen("one.txt", "rt");
	 pr = fopen("two.txt", "wt");
	 
	 while(!feof(pf))
	 {
	       ch = getc(pf);
	       if(ch == 'м')
	       		 putc('М',pr);
	       else
	       	   	 putc(ch,pr);
	 }
	 fclose(pr);
	 rewind(pf);
	 pr = fopen("two.txt", "rt");
	 while(!feof(pr))
	 {
	       ch = getc(pr);
	       putchar(ch);
	 }
	 fclose(pf);
	 fclose(pr);
	 getch();
}
else	  	  
return 0; 		  
}
l.jpg
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.11.2012, 21:15   #2
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Код:
while(1)
{
    запись в темповую переменную;
    if(feof(fp)) break;
    запись темповой переменной куда нужно;
}
а если так попробовать?

From Stilet: Код попрошу выделять спештегом по кнопке # на панели инструментов поста.

Последний раз редактировалось Stilet; 07.11.2012 в 21:19.
Murashov вне форума Ответить с цитированием
Старый 07.11.2012, 21:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
gets(temp);
Почему не scanf?
По теме: temp[20] но в нем мусор. В цикле заполни его нулями после fprintf или еще лучше - до ввода строки, чтоб так сказать инициализировать буфер для следующей строки ввода.
И естественно - проверь файл one, в нем этот артефакт есть?
I'm learning to live...

Последний раз редактировалось Stilet; 07.11.2012 в 21:20.
Stilet вне форума Ответить с цитированием
Старый 07.11.2012, 21:23   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

не, не то......., может есть еще варианты....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.11.2012, 21:39   #5
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

я же сказал выход) у меня давно была такая же проблема
Код:
while(1)
{
temp=fgetc(fp);
if(feof(fp)) break;
text[i]=temp;
i++;
}
Murashov вне форума Ответить с цитированием
Старый 07.11.2012, 21:40   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

При scanf программа сразу закрывается после записи в первый файл, не давая ввести y n. Обнуление не помогло. В первом файле появляется шестая строка (она пустая), а во втором на этом месте ЯЯ

Это я так понял при первом вводе значений для записи, только у меня for, верно.......
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Stilet; 07.11.2012 в 22:12.
Bugrimov вне форума Ответить с цитированием
Старый 07.11.2012, 21:45   #7
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

ты специально меня игнорируешь?) я же написал решение.
или eof можно использовать
Murashov вне форума Ответить с цитированием
Старый 07.11.2012, 21:55   #8
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Никто тебя не игнорирует, напиши целиком код, в каком месте программы ты его использовал я понять не могу, в моем коде не работает....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.11.2012, 21:55   #9
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

потому что я для примера написал... проверка должна быть в середине цикла. у тебя проблема в том, что ты с начало считываешь, а потом проверяешь на "конец" файл.
Murashov вне форума Ответить с цитированием
Старый 07.11.2012, 22:07   #10
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

это код чтения из первого файла и запись во второй???????????????
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение/запись файлов в сборке. Dianochka C# (си шарп) 5 26.05.2012 10:12
Чтение и запись файлов VB Compact Framwork Rom1k06 Общие вопросы .NET 0 21.12.2010 17:00
Чтение и запись файлов на java kostyan142 Помощь студентам 0 14.02.2010 17:53
Запись и чтение файлов Delphi DEFENEK Помощь студентам 5 09.05.2009 13:05