4 svar
224 visningar
TB16 är nöjd med hjälpen
TB16 182 – Fd. Medlem
Postad: 27 jul 2019 13:47

Skriv ut element från array av strängar

Uppgift:

Who remembers back to their time in the schoolyard, when girls would take a flower and tear its petals, saying each of the following phrases each time a petal was torn:

I love you
a little
a lot
passionately
madly
not at all
When the last petal was torn there were cries of excitement, dreams, surging thoughts and emotions.

Your goal in this kata is to determine which phrase the girls would say for a flower of a given number of petals, where nb_petals > 0.

Sample tests:

/* Adapted from the tests originally written by a code warrior - nbeck. */

#include <criterion/criterion.h>

const char* how_much_i_love_you(int nb_petals);

Test(CoreTests, ShouldPassAllTheTestsProvided) {
cr_assert(strcmp(how_much_i_love_you(7), "I love you") == 0);
cr_assert(strcmp(how_much_i_love_you(3), "a lot") == 0);
cr_assert(strcmp(how_much_i_love_you(6), "not at all") == 0);
}

Källa: https://www.codewars.com/kata/i-love-you-a-little-a-lot-passionately-dot-dot-dot-not-at-all/train/c

Mitt försök att lösa uppgiften:

#include <stddef.h> // NULL
#include <stdlib.h>
#include <stdio.h>

#define BSIZE 8000

const char* how_much_i_love_you(int nb_petals) {

const char *my_array[] = {
"I love you",
"a little",
"a lot",
"passionately",
"madly",
"not at all"
};

char *ptr = NULL;
ptr = malloc (sizeof (char) * 15);

printf("%s\n", my_array[0]); //debug

switch(nb_petals){

case '7':
ptr = my_array[0];
break;

case '6':
ptr = my_array[5];
break;

case '5':
ptr = my_array[4];
break;

case '3':
ptr = my_array[2];
break;

case '2':
ptr = my_array[1];
break;

case '1':
ptr = my_array[3];
break;

}

return ptr;

}

Felmeddelande:
"The expression strcmp(how_much_i_love_you(7), "I love you") == 0 is false."

Fråga:
Är det någon som ser var i min kod som felet ligger? Jag förstår inte riktigt varför talet 6 är kopplat till 'not at all' om talet 7 är kopplat till 'I love you'. 

Laguna Online 28468
Postad: 27 jul 2019 15:12

Dina case kollar på t. ex. '7', men det borde stå 7.

'7' är ASCII-koden för 7, dvs. 53.

Dessutom är jag osäker på om inte din array allokeras på stacken. Om den gör det så pekar ptr på nånting odefinierat när funktionen returnerar. Du kan skriva static så allokeras den på "heapen", dvs. arrayen finns kvar efter att funktionen returnerar.

TB16 182 – Fd. Medlem
Postad: 27 jul 2019 15:48
Laguna skrev:

Dina case kollar på t. ex. '7', men det borde stå 7.

'7' är ASCII-koden för 7, dvs. 53.

Dessutom är jag osäker på om inte din array allokeras på stacken. Om den gör det så pekar ptr på nånting odefinierat när funktionen returnerar. Du kan skriva static så allokeras den på "heapen", dvs. arrayen finns kvar efter att funktionen returnerar.


Jag gjorde som du sa och nu passerar koden 3 stycken test. Dock får jag ett nytt felmeddelande som är följande:

The expression strcmp( how_much_i_love_you(randomValue), how_much_i_love_you_checker(randomValue) ) == 0 is false.

Är det något fall jag saknar i min switch?

Laguna Online 28468
Postad: 27 jul 2019 23:29
TB16 skrev:
Laguna skrev:

Dina case kollar på t. ex. '7', men det borde stå 7.

'7' är ASCII-koden för 7, dvs. 53.

Dessutom är jag osäker på om inte din array allokeras på stacken. Om den gör det så pekar ptr på nånting odefinierat när funktionen returnerar. Du kan skriva static så allokeras den på "heapen", dvs. arrayen finns kvar efter att funktionen returnerar.


Jag gjorde som du sa och nu passerar koden 3 stycken test. Dock får jag ett nytt felmeddelande som är följande:

The expression strcmp( how_much_i_love_you(randomValue), how_much_i_love_you_checker(randomValue) ) == 0 is false.

Är det något fall jag saknar i min switch?

Talet 4, t.ex. Och funktionen ska klara alla antal kronblad, t. ex. 109. Du ser att man börjar om efter 6.

TB16 182 – Fd. Medlem
Postad: 28 jul 2019 20:54
Laguna skrev:
TB16 skrev:
Laguna skrev:

Dina case kollar på t. ex. '7', men det borde stå 7.

'7' är ASCII-koden för 7, dvs. 53.

Dessutom är jag osäker på om inte din array allokeras på stacken. Om den gör det så pekar ptr på nånting odefinierat när funktionen returnerar. Du kan skriva static så allokeras den på "heapen", dvs. arrayen finns kvar efter att funktionen returnerar.


Jag gjorde som du sa och nu passerar koden 3 stycken test. Dock får jag ett nytt felmeddelande som är följande:

The expression strcmp( how_much_i_love_you(randomValue), how_much_i_love_you_checker(randomValue) ) == 0 is false.

Är det något fall jag saknar i min switch?

Talet 4, t.ex. Och funktionen ska klara alla antal kronblad, t. ex. 109. Du ser att man börjar om efter 6.

Okej, jag missade att man började om efter 6 men lyckades lösa det nu :) Tack för hjälpen 

Svara Avbryt
Close