Hamster1986 Опубликовано 17 мая, 2007 Жалоба Поделиться Опубликовано 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; }}} Спасибо, прикладываю получившийся файл Ссылка на комментарий Поделиться на другие сайты Поделиться
Vadius Опубликовано 18 мая, 2007 Жалоба Поделиться Опубликовано 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 описывать такие огромные действия не кузяво Было бы логичнее выделить в отдельную функцию Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти