Jump to content
СофтФорум - всё о компьютерах и не только

Задача на С


Recommended Posts

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

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

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

Link to comment
Share on other sites

...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: Было бы логичнее выделить в отдельную функцию

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...