Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Задача на С


Рекомендуемые сообщения

Короче суть задачи в том, что надо записать данные с экрана в структура а потом перегнать файл, у меня вроде получилось, но есть одна фигня, при просмотре получившегося файла на месте одного значения стоит какая-то херь, и съедается часть следующего значения, кто может помогите плз

#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;  }}}

Спасибо, прикладываю получившийся файл

Ссылка на комментарий
Поделиться на другие сайты

...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 описывать такие огромные действия не кузяво :g: Было бы логичнее выделить в отдельную функцию

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...