pa07.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * Do not modify this file.
  3. */
  4. #include "pa07.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #define TRUE 1
  8. #define FALSE 0
  9. int readSparseArrayFile(const char* filename, Node * * sparse_array)
  10. {
  11. // initialize input file
  12. *sparse_array = NULL;
  13. FILE * fptr = NULL;
  14. fptr = fopen(filename, "r");
  15. if (fptr == NULL)
  16. {
  17. fprintf(stderr, "Error opening file: '%s', aborting.\n", filename);
  18. return FALSE;
  19. }
  20. // initializing array
  21. int hasError = FALSE;
  22. int sparse_array_size = 0;
  23. int i;
  24. int lineno = 0;
  25. fscanf(fptr, "%d", &sparse_array_size);
  26. lineno++;
  27. int * array_index = malloc(sizeof(int) * sparse_array_size);
  28. int * array_value = malloc(sizeof(int) * sparse_array_size);
  29. if (sparse_array_size > 0 && (!array_index || !array_value))
  30. {
  31. fprintf(stderr, "Failed to allocate memory (!), aborting.\n");
  32. hasError = TRUE;
  33. }
  34. for(i = 0; i < sparse_array_size && !hasError; i++)
  35. {
  36. if(fscanf(fptr, "%d", &array_index[i]) != 1)
  37. {
  38. fprintf(stderr, "Input file error at line #%d\n", lineno);
  39. hasError = TRUE;
  40. }
  41. lineno++;
  42. }
  43. for(i = 0; i < sparse_array_size && !hasError; i++)
  44. {
  45. if(fscanf(fptr, "%d", &array_value[i]) != 1)
  46. {
  47. fprintf(stderr, "Input file error at line #%d\n", lineno);
  48. hasError = TRUE;
  49. }
  50. lineno++;
  51. }
  52. printf("\n");
  53. if(!hasError)
  54. {
  55. *sparse_array = List_build(array_value, array_index, sparse_array_size);
  56. }
  57. fclose(fptr);
  58. free(array_index);
  59. free(array_value);
  60. if(hasError)
  61. {
  62. fprintf(stderr, "Aborting due to previous errors, goodbye.\n");
  63. return FALSE;
  64. }
  65. return TRUE;
  66. }
  67. int main(int argc, char ** argv)
  68. {
  69. if (argc != 3)
  70. {
  71. printf("Usage: ./pa05 <input file 1> <input file 2>\n");
  72. return EXIT_FAILURE;
  73. }
  74. // Input file processed, ready to build the sparse-array
  75. Node * array1 = NULL, * array2 = NULL;
  76. int okay = TRUE;
  77. okay = okay && readSparseArrayFile(argv[1], &array1);
  78. okay = okay && readSparseArrayFile(argv[2], &array2);
  79. if(okay)
  80. {
  81. FILE * out = stdout; // This is where we output results
  82. printf("*******************************\n");
  83. printf("Array 1:\n");
  84. printf("*******************************\n");
  85. List_print(out, array1);
  86. printf("\n*******************************\n");
  87. printf("Array 2:\n");
  88. printf("*******************************\n");
  89. List_print(out, array2);
  90. printf("\n*******************************\n");
  91. printf("Copy of Array 1:\n");
  92. printf("*******************************\n");
  93. Node * clone_array = List_copy(array1);
  94. List_print(out, clone_array);
  95. printf("\n*******************************\n");
  96. printf("Merged array:\n");
  97. printf("*******************************\n");
  98. Node * array_new = List_merge(array1, array2);
  99. List_print(out, array_new);
  100. List_destroy(array_new);
  101. List_destroy(clone_array);
  102. }
  103. List_destroy(array1);
  104. List_destroy(array2);
  105. return EXIT_SUCCESS;
  106. }