C编程,char*长度不能覆盖整个数组



所以,程序所做的是,你用键盘写一天,他会验证它。你的输入可以是小写或大写。问题是我什么时候给它超过星期四。你可以看到扭曲得到了奇怪的值。length_arr是我用来测量数组长度的函数。有什么建议吗?

int length_arr(char* x)
{
    int i, length;
    for (i = 0; x[i] != ''; 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.nn");
    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("%cn", 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 %cn", day[i]);
            printf(" friday %cn", 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("%dn", (int)day[3]);
    printf("%dn", a);
    printf("%dn", (int)friday[3]);
    printf("%dn", contor1);
    printf("%dn", contor2);
    printf("%dn", contor3);
    printf("%dn", contor4);
    printf("%dn", contor5);
    printf("%dn", contor6);
    printf("%dn", contor7);
    if ((int)monday[0] == a)
        printf("one");
    else
        printf("two");
    }
}
void main()
{
    char* day;
    day = new char(20);
    valid_weekday(day);
    delete (day);
}

当您键入thursday时,第一个ttuesday中的第一个t匹配,数组的其余部分与thursday中的hursday匹配,因此最终contor21contor47。在查看输入是否有效的条件中,您可以检查是否有任何扭曲值是字符串的完整长度,因为星期四有8个字符,所以不会是完整长度。

最新更新