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'.
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.
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?
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.
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