static
void DoTest()
{
    int num_items=64;
    My402List list, list2;

    memset(&list, 0, sizeof(My402List));
    memset(&list2, 0, sizeof(My402List));
    (void)My402ListInit(&list);
    (void)My402ListInit(&list2);

    CreateTestList(&list, num_items);
    RandomShuffle(&list, num_items);
    FindAllInList(&list, num_items);
    CopyTestList(&list, &list2);

    BubbleSortForwardList(&list, num_items);
    if (gnDebug > 0) PrintTestList(&list, num_items);

    BubbleSortBackwardList(&list2, num_items);
    if (gnDebug > 0) PrintTestList(&list2, num_items);

    CompareTestList(&list, &list2, num_items);

    My402ListUnlinkAll(&list);
    My402ListUnlinkAll(&list2);
}
Пример #2
0
int main(int argc, char *argv[])
{
		My402List list;
   // My402ListElem *elem=NULL;

    memset(&list, 0, sizeof(My402List));
    (void)My402ListInit(&list);
	
	//Transact t;
	
	
			FILE *fptr;
			//char address[100]="test.tfile";
		char buf[200];
	//printf("ARGC: %d\n",argc);
	if(argc<2)//if sort is missing
	{
		printf("Malformed command\n");
		exit(0);
	}
	if((strcmp(argv[1],"sort")))//if second argument is not 'sort'
	{
		printf("Malformed command\n");
		exit(0);
	}
	if(argc==2)
	{
			fptr=stdin;			
	}
	if(argc==3)
	{		
		if(!strstr(argv[2],".tfile"))
		{
			printf("Could not open file: %s\n",argv[2]);
			printf("Input file either a directory or not in correct format\n");
			exit(0);
		}
		
		fptr=fopen(argv[2], "rt"); 		
	}
    if (fptr==NULL) 
    { //perror("Error:");
       // printf("%s",argv[2]);
        printf("Could not open file: %s!\n",argv[2]); // error in opening file
		printf("%s\n", strerror(errno));
		exit(0);
		//perror("Error:");
        // getch();
        return 1; 
    }
    else
    {
	
		while(fgets(buf, sizeof(buf), fptr) != NULL)
		{
			// if (fgets(buf, sizeof(buf), fptr) == NULL)
		// {
		  // /* end of file */
		  // break;
		// } 
	//else 
	//	{
			//printf("%s",argv[3]);
			//printf("==%s==",buf);
			//printf("COMING TILL HERE!!!\n");
			if(strlen(buf)>1024)
			{
				printf("Invalid input, line is too long\n");
				exit(0);
			}
			long timeint;
			char timec[30];//change size 
			char op;
			//float amt;
			double a=0.0;
			char desc[40];//change size!!!
			//else 
			{
				
				Transact *t;
				t=malloc(sizeof(struct data));
				//printf("BUF: %s\n",buf);
				int i;
				
				char *start_ptr = buf;
				if(!strchr(start_ptr,'\t'))
				{
					printf("Invalid input, not enough info\n");
					exit(0);
				}
				//char *nline_ptr;
				if(strchr(start_ptr,'\r'))
				{
				char *nline_ptr = strchr(start_ptr,'\r');
				*nline_ptr++='\0';
				}
				if(strchr(start_ptr,'\n'))
				{
				char *nline_ptr = strchr(start_ptr,'\n');
				*nline_ptr++='\0';
				}
				char *tab_ptr = strchr(start_ptr, '\t');
				if (tab_ptr != NULL) 
				{
				  *tab_ptr++ = '\0';
				 // printf("%s\t",start_ptr);
				  op=start_ptr[0];
						//printf("OPERATOR= %c\n",op);
						t->op=op;
						if(((op!='+')&&(op!='-')))
						{
							printf("Invalid input with Operator: %c\n",t->op);
							exit(1);
						}
					//	printf("%c\t",t->op);
				}
				for(i=0;i<3;i++)
				{
					start_ptr = tab_ptr;
					// if(!strchr(start_ptr,'\t'))
					// {
						// printf("Invalid input, not enough info2\n");
						// //exit(0);
					// }
						tab_ptr = strchr(start_ptr, '\t');
					//nline_ptr= strchr(start_ptr, '\n');
					
					if ((tab_ptr != NULL)) 
					{
					  *tab_ptr++ = '\0';
					  
					}
					if(i==0)
					{
												
						if(strlen(start_ptr)>=11)
						{
							printf("Invalid input in timestamp: %s\n",start_ptr);
							exit(0);
						}
						if(!((atoi(start_ptr)>0)&&(atoi(start_ptr)<time(NULL))))
						{
							printf("Invalid input in timestamp\n");
							exit(0);
						}
					
						 timeint=atol(start_ptr);
						t->ltime=timeint;
						//printf("--TIME: %lu\t",timeint);
						strcpy(timec,ctime(&timeint));//time is stored in array time
						
					}
					else if(i==1)
					{
						//if(start_ptr[strlen(start_ptr)-3]
					  if(strlen(start_ptr)<4)//min should have one digit before decimal, 2 after and decimal itself
					  {
						printf("Invalid input, not enough digits or decimal\n");
						exit(0);
					  }
					 // if((start_ptr[strlen(start_ptr)-3]!='.')&&(start_ptr[0]=='.'))
					// printf("%c",start_ptr[strlen(start_ptr)-3]);
					  if((start_ptr[strlen(start_ptr)-3]!='.'))
					  {
						printf("Invalid input, does not contain decimal or enough digits after decimal: %s\n",start_ptr);
						exit(0);
					   }
					  if(start_ptr[0]=='.')
					  {
						printf("Invalid input, no digit before decimal\n");
						exit(0);
					  }
						a=atof(start_ptr);
						
						if((a>10000000)||(a<0))
						{
							printf("Invalid input with Amount\n");
							exit(1);
						}
						t->amt=a*100;
						
						
	
						// sprintf(chk, "%0.2f",a);
						// printf("STRING: %s\n",chk);
						// printf("Invalid input, does not contain decimal: %c\n",chk[strlen(chk)-2]);
						// // if(chk[strlen(chk)-3]!='.')
							// // printf("Invalid input, does not contain decimal: %c\n",chk[strlen(chk)-2]);
						
						//printf("AMOUNT: %f--\t",a);
						//printf("%f\t",a);
						//printf("%d\t",t->amt);
					}
					else if(i==2)
					{
						while(isspace(*start_ptr)) 
							start_ptr++;

					    if(*start_ptr == 0)  // All spaces?
						{
							printf("Invalid input..No description\n");
							exit(0);
						}
						if(strlen(start_ptr)>24)
							strncpy(desc,start_ptr,23);
						else
							strcpy(desc,start_ptr);
						
						strcpy(t->desc,desc);
						//t->desc=desc;
						//printf("Description%s",start_ptr);
						//printf("%s\n",t->desc);
					}
				//	printf("%s\t",start_ptr);
				}
				//printf("\n");
				if(checkTime(&list,t->ltime))//1 returned if same exists
				{
					printf("Two same timestamps detected\n");
					exit(0);
				}
				//printf("CTIME:%s",ctime(&time));	
				//printf("Appending\n");
				My402ListAppend(&list,t);
			
			}
		 //}
	  }//while loop
	}
	BubbleSortForwardList(&list,list.num_members);
	PrintTestList(&list,list.num_members);
  
 
    return(0);
}