Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Запись в файл, чтение из файла


Автор: Varyen 25.10.2009, 22:51
Здравствуйте всем снова! 

1. Собственно в следующей программе есть одна главная проблема - при чтении из файла сторки с номером счета, именем плательщика, суммой и датой, последняя строка дублируется, при этом сумма отражается некорректно во 2-й строке. 

2. Также в последней функции applyfileread есть проблема, что функция не работает если пользоваться строками кода которые закомментены, ну и если собственно убрать все ненужное из работающего. 

Ну самое главное с 1. проблемой разобраться, буду очень благодарен за помощь, а также за некоторые советы по коду, т.к. совсем ещё зеленый новичек smile 

Код


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <ctype.h>
#include <fcntl.h>
#include <bios.h>
#include <io.h>

void applyfilewrite();
void applyfileread();
void choice();
char dataconf[30], dataapply[30], date[10];
int dataapply1, bill;
FILE* config;
FILE* apply;

void choice()
{
char answer= 'v';
while (answer!='e')
     {
     rewind(stdin);
     printf("Choose what you want:\n");
     printf("e- end, w- write, r-read\n");
     scanf("%s", &answer);
     if (answer=='w')
       {
       applyfilewrite();
       }
     if (answer=='r')
       {
       applyfileread();
       }
      }
      fclose(apply);
      fclose(config);
      exit(1);
}

int main()
{
int config;
clrscr();
if((config=open("config.prj", O_RDONLY|O_TEXT|S_IREAD)) == NULL)
     {
     config = open("config.prj", O_RDWR|O_CREAT|O_TEXT|S_IREAD/S_IWRITE);
     printf("Input application file name\n");
     scanf("%30s",&dataconf);
     write(config, dataconf, sizeof(dataconf));
     close(config);
     }
config = open("config.prj", O_RDONLY|O_TEXT|S_IREAD);
while (!eof(config))
    {
    read(config, dataconf, sizeof(dataconf));
    printf("File name is %s\n", dataconf);
    }
choice();
close(config);
getch();
return 0;
}

void applyfilewrite()
{
apply = fopen(dataconf, "a");
printf("Input bill number: ");
scanf("%2d", &bill);
fprintf(apply, "%2d  ", bill);
printf("Input name of payer: ");
scanf("%30s", &dataapply);
fprintf(apply, "%30s", dataapply);
printf ("Input incoming sum from %s:", dataapply);
scanf("%10d", &dataapply1);
fprintf(apply, "%10d", dataapply1);
printf("Input date of payment: ");
scanf("%15s", &date);
fprintf(apply, "%15s\n", date);
fclose(apply);
}

void applyfileread()
{
//int i;
apply = fopen(dataconf, "r+");
fseek(apply, 0L, SEEK_SET);
while (!feof(apply))
{
//i=0;
//while(dataapply[i])
//{
//dataapply[i]= fgetc(apply); i++;
//}
fscanf(apply, "%d", &bill);
printf("%2d ", bill);
fscanf(apply, "%s", &dataapply);
printf("%30s", dataapply);
fscanf(apply, "%d", &dataapply1);
printf("%10d", dataapply1);
fscanf(apply, "%s", &date);
printf("%15s\n", date);
}
fclose(apply);
getch();
}


Добавлено: все, нашел ошибку совсем глупую, но искал реально долго

fscanf(apply, "%s\n", &date);  \n тут надо было поставить smile

извиняюсь за глупую тему, но вчера реально не понмал почему так происходит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)