====== Lab 05 - Structs and enums ====== ==== Reading strings ==== Help function for reading longer strings with spaces into a char* char* getInput() { char* string = NULL; int strlen = 0; while(1) { char character; scanf("%c", &character); if(character == 10) { return string; } strlen++; string = realloc(string, strlen); string[strlen-1] = character; } } ==== Strings revision ==== * Write a program which will ask the user for their name, and set the first letter of each word to uppercase. Remember to use functions! * Let’s build a program that can take an input string from the user and remove any whitespace (spaces) at the start and end of the string. * We will be re-using this code later, so remember to make use of functions * Let’s build a program that will take the user’s name “vaclav havel”, and will output: * Name 1: Vaclav * Name 2: Havel * You can reuse your functions from before for capitalization and white-space removal. ==== Enums and structs ==== * Let’s build on our previous example and ask for the user's detail, including date of birth, but implement this as an enum. * Let’s write a program that will ask for people's names and store them in a struct. * The structs will be dynamically allocated every time a person enters a new user’s information ==== Doxygen ==== * widely spread tool for creating documentation * complete manual is [[https://doxygen.nl/manual/index.html]] === Examples === * local or global variables /// number of color channels static const int numChannels = 3; * macro /// A macro that returns the maximum of \a a and \a b. #define MAX(a,b) (((a)>(b))?(a):(b)) * enum or struct /// Enum for area fill modes. Passed to sglAreaMode() function. enum sglEAreaMode { SGL_POINT = 0, ///< Draw only vertices SGL_LINE = 1, ///< Draw only borders of graphics elements (lines) SGL_FILL = 2 ///< Draw filled elements, default }; * function declaration /// Create a new drawing context. /** Create a new drawing context for the drawing window with dimensions width x height of RGB pixels. Allocates additional internal structures for the context (including the depth buffer). \param[in] width Desired canvas width. \param[in] height Desired canvas height. \return Unique identifier of the drawing context. ERRORS: - SGL_OUT_OF_MEMORY ... not enough memory - SGL_OUT_OF_RESOURCES ... too many contexts (Implementation dependent. At least 32 must be provided, though.) */ int sglCreateContext(int width, int height);