2016-03-27 8 views
1

したがって、プログラムはキーボードから1日書いて、検証します。入力は小文字でも大文字でもかまいません。 問題は、私が木曜日に何日かそれを与えるときです。あなたはcontorが奇妙な値を取得することがわかります。 length_arrは、配列の長さを測定するために使用する関数です。 提案がありますか?あなたはthursdayで入力するとCプログラミングでは、char * lengthは配列全体をカバーすることはできません。

int length_arr(char* x) 
{ 

    int i, length; 
    for (i = 0; x[i] != '\0'; i++) { 
    } 

    return length = i - 1; 
} 

void valid_weekday(char* day) 
{ 
    bool incorrect = true; 
    char *monday = "monday", *tuesday = "tuesday", *wednesday = "wednesday", *thursday = "thursday", *friday = "friday", *saturday = "saturday", *sunday = "sunday"; 

    while (incorrect) { 
    int contor1 = 0, contor2 = 0, contor3 = 0, contor4 = 0, contor5 = 0, contor6 = 0, contor7 = 0; 
    //printf("NOTE: Weekday can contain uppercase letters. Why? Because reasons.\n\n"); 
    printf("Enter a valid weekday, please!:\n"); 
    fgets(day, 20, stdin); 

    for (int i = 0; i < length_arr(day); i++) { 

     if (day[i] == monday[i] || (int)monday[i] == (int)day[i] + 32) { 
      contor1++; 
      //.. To understand where i stops. 
      printf("%c\n", day[i]); 
     } 
     else if (day[i] == tuesday[i] || (int)tuesday[i] == (int)day[i] + 32) 
      contor2++; 
     else if (day[i] == wednesday[i] || (int)wednesday[i] == (int)day[i] + 32) 
      contor3++; 
     else if (day[i] == thursday[i] || (int)thursday[i] == (int)day[i] + 32) 
      contor4++; 
     else if (day[i] == friday[i] || (int)friday[i] == ((int)day[i] + 32)) { 
      contor5++; 
      // ... To understand where i stops. (i stops at 2) 
      printf(" day %c\n", day[i]); 
      printf(" friday %c\n", friday[i]); 
     } 
     else if (day[i] == saturday[i] || (int)saturday[i] == (int)day[i] + 32) 
      contor6++; 
     else if (day[i] == sunday[i] || (int)sunday[i] == (int)day[i] + 32) 
      contor7++; 
    } 
    if (contor1 == length_arr(day) || contor2 == length_arr(day) || contor3 == length_arr(day) || contor4 == length_arr(day) || contor5 == length_arr(day) || contor6 == length_arr(day) || contor7 == length_arr(day)) { 
     printf("Good, you entered good.\n"); 
     incorrect = false; 
    } 
    else 
     printf("Wrong day format!\n"); 

    // Tests to understand why other contor get value too 
    int a = (int)day[0] - 32; 
    printf("%d\n", (int)day[3]); 
    printf("%d\n", a); 
    printf("%d\n", (int)friday[3]); 
    printf("%d\n", contor1); 
    printf("%d\n", contor2); 
    printf("%d\n", contor3); 
    printf("%d\n", contor4); 
    printf("%d\n", contor5); 
    printf("%d\n", contor6); 
    printf("%d\n", contor7); 
    if ((int)monday[0] == a) 
     printf("one"); 
    else 
     printf("two"); 
    } 
} 

void main() 
{ 
    char* day; 
    day = new char(20); 
    valid_weekday(day); 
    delete (day); 
} 
+0

あなたのlength_arr関数が間違っています。文字列の長さはちょうど 'i'です。 'i - 1'ではありません。文字列の長さを決定するには、[strlen](http://www.tutorialsp.com/ com_standard_library/c_function_strlen.htm)を使用します。また、これは文字列比較を行う奇妙な方法です。 strcmp(http://linux.die.net/man/3/strcmp)または大文字小文字を区別しない比較[strcasecmp](http://linux.die.net/man/3/strcasecmp)を探します。 –

+0

はこのcまたはC++コードですか?また、なぜ 'strlen'を使わないのですか? – t0mm13b

+0

@ t0mm13b: "*はこのcまたはC++コードですか*"なぜあなたは尋ねますか? C++タグはなく、コードに固有のC++はありません。 –

答えて

0

その後tuesdayの最初のtに対する最初t一致し、配列の残りの部分はthursdayhursdayにマッチ - あなたはcontor271contor4ことで終わります。条件が満たされているかどうかを確認するには、contor値のいずれかが文字列の全長であるかどうかを確認します。これは、木曜日が8文字あるためです。

関連する問題