# Week 06 Tutorial Questions

Your tutor has asked a lab pair to present their week 5 work.

Discuss the good, the bad and the ugly aspects of their code.

Please be gentle in any criticism - we are all learning!

2. What does the following function do?
int secret_function(char *word) {
int i = 0;
int result = 0;
while (word[i] != '\0') {
if(word[i] >= 'a' && word[i] <= 'z') {
result++;
}
i++;
}
return result;
}

3. Can you explain the stopping case in the while loop? Why does it work and what is the significance of the '\0'?
4. What does the char *word input mean? What's the relationship between an array and a pointer?
5. Observe the following code, modified from lectures:
/* A Dice checking app
Marc Chee September 2019

This will take dice roll numbers from a user

It will then check if the roll total is higher
or lower than a secret target number
*/

#include <stdio.h>

#define EXIT_SUCCESS 0
#define SECRET_VALUE 7

int main(void) {
int dieOne;
int dieTwo;
int diceSize = 6;

// Ask the user for the size of the dice
printf("How many sides are on the dice?\n");
scanf("%d", &diceSize);

// Get user input for dice rolls
printf("Please type in the result of the first die:\n");
scanf("%d", &dieOne);
if (dieOne < 1 || dieOne >= diceSize) {
printf("%d was invalid, ", dieOne);

// Use mod to give a value inside the range 1-dice size
dieOne = dieOne % diceSize;
if (dieOne == 0) {
dieOne = diceSize;
}
printf("and has been corrected to %d.\n", dieOne);
}

printf("Please type in the result of the second die:\n");
scanf("%d", &dieTwo);
if (dieTwo < 1 || dieTwo > diceSize) {
printf("%d was invalid, ", dieTwo);

// Use mod to give a value inside the range 1-dice size
dieTwo = dieTwo % diceSize;
if (dieTwo == 0) {
dieTwo = diceSize;
}
printf("and has been corrected to %d.\n", dieTwo);
}

printf("You rolled %d and %d\n", dieOne, dieTwo);

// create total and check against the secret number
int total = dieOne + dieTwo;

printf("The total is %d\n", total);

if (total > SECRET_VALUE) {
// total is higher than SECRET_VALUE
printf("You succeeded!\n");
} else if (total == SECRET_VALUE) {
// total is tied with SECRET_VALUE
printf("An exact tie!\n");
} else {
// total is lower than SECRET_VALUE
printf("You failed!\n");
}

return EXIT_SUCCESS;
}

Discuss how we could make this code easier to read and safer to modify using functions. Suggest a function that would help and write that function.
6. Write a program sum_digits.c which reads characters from its input and counts digits.

When the end of input is reached it should print a count of how many digits occurred in its input and their sum.

The only functions you can use are getchar(), printf() and a very useful function called isdigit() from the ctype.h library which you should include.

For example:

./sum_digits
1 2 3 o'clock
4 o'clock rock
Input contained 4 digits which summed to 10
./sum_digits
12 twelve 24 twenty four
thirty six 36
Input contained 6 digits which summed to 18