Hamster1986 Posted May 17, 2007 Report Share Posted May 17, 2007 Короче суть задачи в том, что надо записать данные с экрана в структура а потом перегнать файл, у меня вроде получилось, но есть одна фигня, при просмотре получившегося файла на месте одного значения стоит какая-то херь, и съедается часть следующего значения, кто может помогите плз #include <stdlib.h>#include <stdio.h>#include <conio.h>#include <io.h>#include <stdlib.h>#include <string.h>struct Perfomanse {int proc;char memory[5];char hd[5];int chastota;char monitor[5];};struct EVM{char marka[50];int cena;char proizv[50]; Perfomanse konfa;};#define KOMPSIZE 50void print_EVM(EVM &komp) { printf("EVM\n"); printf("Marka: %s\n",komp.marka); printf("Cena: %d\n",komp.cena); printf("Proizvoditel: %s\n",komp.proizv); printf("Konfiguracia\n"); printf("Processor: %d\n",komp.konfa.proc); printf("Operativnai pamit: %s\n",komp.konfa.memory); printf("Diskovai pamit: %s\n",komp.konfa.hd); printf("Taktovai 4astota: %d\n",komp.konfa.chastota); printf("tip monitora: %s\n",komp.konfa.monitor); printf("-------------------------------------------\n");}void main(){ FILE *fvar;EVM *pc;char *finput,*foutput,*str;int oper,flag; char ch;clrscr();flag=0;printf("\n1. Vvod dannyh v file\n");printf("2. Prosmotr dannih iz fila\n");printf("3. Sozdanie novogo spiska\n");printf("\n Rezhim raboti...............> ");scanf("%d",&oper);if((oper>=1) && (oper<=3)){ printf("Vvedite imy fila.......> "); scanf("%s",finput); if(oper==2) { printf("Vvedite imy fila rezul'tata.....> "); scanf("%s",foutput); if(access(foutput,'00')==0) flag=1; pc=(EVM*)malloc(sizeof(EVM)); } switch(oper) { case 1: ch = 'Y'; fvar=fopen(finput,"a+"); while(ch=='Y') { clrscr(); gets(str); printf("Marka\n"); gets(pc->marka); // gets(str); printf("Proizvoditel\n"); gets(pc->proizv); printf("Cena..."); scanf("%d",&(pc->cena)); printf("Tip processora...."); scanf("%d",&(pc->konfa.proc)); gets(str); printf("Operetivnai pamit\n"); gets(pc->konfa.memory); printf("Diskovai pamit\n"); gets(pc->konfa.hd); printf("Taktovai 4astota..."); scanf("%d",&(pc->konfa.chastota)); gets(str); printf("Tip monitora\n"); gets(pc->konfa.monitor); fprintf(fvar,"%s\n",pc->marka); fprintf(fvar,"%s\n",pc->proizv); fprintf(fvar,"%d\n",pc->cena); fprintf(fvar,"%d\n",pc->konfa.proc); fprintf(fvar,"%s\n",pc->konfa.memory); fprintf(fvar,"%s\n",pc->konfa.hd); fprintf(fvar,"%d\n",pc->konfa.chastota); fprintf(fvar,"%s\n",pc->konfa.monitor); printf("\nProdolgit' vvod(Y/N)"); scanf("%s",&ch); } fclose(fvar); break; }}} Спасибо, прикладываю получившийся файл Quote Link to comment Share on other sites More sharing options...
Vadius Posted May 18, 2007 Report Share Posted May 18, 2007 ...void main(){...char *finput,*foutput,*str;...if((oper>=1) && (oper<=3)){ printf("Vvedite imy fila.......> "); scanf("%s",finput); Ты зачем делаешь scanf в неинициализированный указатель? И как он у тебя вообще не падает? Попробуй для начала заменить char *finput и иже с ними на char finput[32], например. Да.. ещё оч рекомендую внимательно посмотреть код. Бо попадаются очень странные структуры типа: if(1 < oper < 3) { if (oper == 2) ... switch(oper) { case 1: ... } } не говоря уже о том, что внутри switch-case описывать такие огромные действия не кузяво Было бы логичнее выделить в отдельную функцию Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.