Помогите пожалуйста!!!не читает данные из файла.
От: lewa  
Дата: 08.05.08 12:12
Оценка:
Помогите пожалуйста!!!не читает данные из файла.
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>

class riss
{ public:
  line(int,int,int,int);
    void  vvod(int,int,int,int);
  int x1,y1,x2,y2;

 };
  int vvod ()
   {
  int x1,y1,x2,y2;

     FILE*f;
    if(( f=fopen("file.dat","r"))==NULL)
    { printf ("File could not be opened\n");
    }
    else
    {
     printf ("x1,y1,x2,y2\n");
     fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);
     rewind (f);
     fclose(f);
    }
     return 0;
   }


 int main(void)
  {
     clrscr();
    int gdriver = DETECT, gmode,errorcode;
    int x1,y1,x2,y2;
    initgraph(&gdriver,&gmode,"F:\\C\\bgi");
    errorcode = graphresult();
    if (errorcode != grOk)
    { printf ("Press any key to Halt:");
    getch();
    exit(1);
    }
    int v1,z1,v2,z2;
    setcolor(getmaxcolor());

     
     
     rectangle(x1,y1,x2,y2);
     char v;
     printf (" Vvedite move \n");

     scanf ("%c",&v);
     switch (v)
    {
     case 's':z1=y1+10,z2=y2+10,v1=x1,v2=x2; break;
     case 'w':z1=y1-10,z2=y2-10,v1=x1,v2=x2; break;
     case 'd':v1=x1+10,v2=x2+10,z1=y1,z2=y2; break;
     case 'a':v1=x1-10,v2=x2-10,z1=y1,z2=y2; break;
     case 'x':v2=x2-10,z2=y2+10,v1=x1,z1=y1; break;
     default:printf("Ne verno vvedeno deustvie\n");
     }
          clearviewport();
          setcolor(getmaxcolor());
      rectangle(v1,z1,v2,z2);
      printf("%d\n%d\n%d\n%d\n",v1,z1,v2,z2);
      getch();
      closegraph();
  return 0;
  };

не забываем про разметку — Кодт
Re: Помогите пожалуйста!!!не читает данные из файла.
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 08.05.08 12:21
Оценка:
Здравствуйте, lewa, Вы писали:

L> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


Спецификаторов 5, а переменных всего 4.

P.S. Когда я пробовал так читать, то в итоге пришел к тому, чтобы считывать строчки fgets()'ом и уже из них sscanf()'ом.
Re[2]: Помогите пожалуйста!!!не читает данные из файла.
От: Аноним  
Дата: 08.05.08 12:34
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, lewa, Вы писали:


L>> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


PC>Спецификаторов 5, а переменных всего 4.


PC>P.S. Когда я пробовал так читать, то в итоге пришел к тому, чтобы считывать строчки fgets()'ом и уже из них sscanf()'ом.




изменил кол-во спецификаторов ,но ничего не изменилось.А с fgets()я что-то непонял...
Re[3]: Помогите пожалуйста!!!не читает данные из файла.
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 08.05.08 12:41
Оценка:
Здравствуйте, Аноним, Вы писали:

L>>> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


У вас как выглядит строчка в файле?

Если 12345, то вероятно, что 12345 считается как одно число и помещается в x1. Попробуйте указать размер явно: ""%1d%1d%1d%1d"

А>изменил кол-во спецификаторов ,но ничего не изменилось.А с fgets()я что-то непонял...


Прочитать строчку в буффер, а потом уже из буффера по переменным.
Re[4]: Помогите пожалуйста!!!не читает данные из файла.
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 08.05.08 12:44
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, Аноним, Вы писали:


L>>>> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


PC>У вас как выглядит строчка в файле?


PC>Если 12345, то вероятно, что 12345 считается как одно число и помещается в x1.


Ну точно:

[c0der@xxx ~]$ ./vvod 19:42
x1,y1,x2,y2
1234 -1074243620 -1209492683 134513993


PC>Попробуйте указать размер явно: ""%1d%1d%1d%1d"


Работает:

[c0der@xxx ~]$ ./vvod 19:42
x1,y1,x2,y2
1 2 3
4

Re[5]: Помогите пожалуйста!!!не читает данные из файла.
От: lewa  
Дата: 08.05.08 13:22
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, php-coder, Вы писали:


PC>>Здравствуйте, Аноним, Вы писали:


L>>>>> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


PC>>У вас как выглядит строчка в файле?


PC>>Если 12345, то вероятно, что 12345 считается как одно число и помещается в x1.


PC>Ну точно:


PC>

PC>[c0der@xxx ~]$ ./vvod 19:42
PC>x1,y1,x2,y2
PC>1234 -1074243620 -1209492683 134513993


PC>>Попробуйте указать размер явно: ""%1d%1d%1d%1d"


PC>Работает:


PC>

PC>[c0der@xxx ~]$ ./vvod 19:42
PC>x1,y1,x2,y2
PC>1 2 3 4

А у меня ничего не работает.
Можете написать поподробнее что вы делаете при заполнении файла.Может я что-то не так делаЮ?
Re[5]: offtopic
От: Roman Odaisky Украина  
Дата: 08.05.08 13:54
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>[c0der@xxx ~]$ ./vvod 19:42


setopt transient_rprompt, а то часы мешают (кажется, будто это параметр). Да и вообще им в PS2 не место.
До последнего не верил в пирамиду Лебедева.
zsh
Re: Помогите пожалуйста!!!не читает данные из файла.
От: Кодт Россия  
Дата: 08.05.08 14:47
Оценка:
Здравствуйте, lewa, Вы писали:

L>Помогите пожалуйста!!!не читает данные из файла.

L>#include<stdio.h>
L>#include <conio.h>
L>#include <stdlib.h>
L>#include <graphics.h>

// сначала ты объявляешь класс riss
// с двумя членами-функциями - line и vvod

L>class riss
L>{ public:
L>  line(int,int,int,int);
L>    void  vvod(int,int,int,int);
L>  int x1,y1,x2,y2;

L> };


// затем ты определяешь свободную функцию vvod
// (не имеющую отношения к предыдущему классу)

L>  int vvod ()
L>   {
L>  int x1,y1,x2,y2;

L>     FILE*f;
L>    if(( f=fopen("file.dat","r"))==NULL)
L>    { printf ("File could not be opened\n");
L>    }
L>    else
L>    {
L>     printf ("x1,y1,x2,y2\n");
L>     fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2); // в которой есть ошибка (об этом уже сказали)
L>     rewind (f);
L>     fclose(f);
L>    }
// прочитали, стало быть, что-то из файла в локальные переменные - и вышли!
// очень полезное действие :))
L>     return 0;
L>   }

// наконец, ты определяешь основную функцию программы,
// которая, собственно, и будет выполняться

L> int main(void)
L>  {
L>     clrscr();
L>    int gdriver = DETECT, gmode,errorcode;
L>    int x1,y1,x2,y2;
L>    initgraph(&gdriver,&gmode,"F:\\C\\bgi");
L>    errorcode = graphresult();
L>    if (errorcode != grOk)
L>    { printf ("Press any key to Halt:");
L>    getch();
L>    exit(1);
L>    }
L>    int v1,z1,v2,z2;
L>    setcolor(getmaxcolor());

     
     // в этом месте x1,y1,x2,y2 ещё не инициализированы... в них мусор
L>     rectangle(x1,y1,x2,y2); // рисуем что попало
L>     char v;
L>     printf (" Vvedite move \n");

L>     scanf ("%c",&v);
L>     switch (v)
L>    {
L>     case 's':z1=y1+10,z2=y2+10,v1=x1,v2=x2; break; // инициализируем z1,z2,v1,v2 мусорными значениями...
L>     case 'w':z1=y1-10,z2=y2-10,v1=x1,v2=x2; break;
L>     case 'd':v1=x1+10,v2=x2+10,z1=y1,z2=y2; break;
L>     case 'a':v1=x1-10,v2=x2-10,z1=y1,z2=y2; break;
L>     case 'x':v2=x2-10,z2=y2+10,v1=x1,z1=y1; break;
L>     default:printf("Ne verno vvedeno deustvie\n");
L>     }
L>          clearviewport();
L>          setcolor(getmaxcolor());
L>      rectangle(v1,z1,v2,z2);
L>      printf("%d\n%d\n%d\n%d\n",v1,z1,v2,z2);
L>      getch();
L>      closegraph();
L>  return 0;
L>  };

Опаньки! А мы нигде и не вызывали vvod() — и слава богу, иначе бы рухнули.

Видимо, нужно было такое
struct Riss
{
    int x1,y1,x2,y2;
    
    void read_config()
    {
        FILE* f = open_config(false);
        if(f) { fscanf(f, "%d %d %d %d", &x1,&y1,&x2,&y2); flolse(f); }
    }
    void write_config()
    {
        FILE* f = open_config(true);
        if(f) { fprintf(f, "%d %d %d %d", x1,y1,x2,y2); flolse(f); }
    }
    FILE* open_config(bool to_write)
    {
        return fopen("file.dat", to_write ? "w" : "r");
    }
};

int main()
{
    // здесь инициализируем графику

    Riss riss;
    
    riss.read_config();
    
    // здесь рисуем, используя riss.x1,...,riss.y2
    // здесь беседуем с пользователем
    // здесь записываем в riss новые значения
    
    riss.write_config();
    
    // здесь закрываем графику
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Помогите пожалуйста!!!не читает данные из файла.
От: игппук Беларусь  
Дата: 08.05.08 18:03
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, lewa, Вы писали:


L>> fscanf(f,"%d%d%d%d%d",&x1,&y1,&x2,&y2);


PC>Спецификаторов 5, а переменных всего 4.


PC>P.S. Когда я пробовал так читать, то в итоге пришел к тому, чтобы считывать строчки fgets()'ом и уже из них sscanf()'ом.


а какая разница, sscanf-ом читать, или fscanf-ом? только в правильности составления регулярного выражения. и при таком подходе gfets — лишнее телодвижение.
проклятый антисутенерский закон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.