c - strcmp 拒绝工作

标签 c strcmp strncmp

我已经尝试了所有方法,但 strcmp(以及 strncmp)总是给出 0 以外的值,无论是否使用指针,以及内部和外部函数。我该怎么办?

该计划的重点是创建一个学生数据系统,用于注册和输入,以及管理和排序所述数据,后者我尚未实现。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int signup(char* ET, char* OT, int* G1T, int* G2T, int* G3T, int* avg, char* status, int* LI, int* sT, int* TT, char** UT, int** PT)
{
int i;
char LU[21];
int ID;
if (strcmp (status, "Register") == 0)
{
    printf("Enter last name: ");
    scanf("%s", ET);
    printf("Enter first name: ");
    scanf("%s", OT);
    while(1)
    {

        printf("Enter C grade: ");
        scanf("%d", G1T);
        if (*G1T >= 0 && *G1T <= 10)
        {
            break;
        }
    }
    while(1)
    {

        printf("Enter Java grade: ");
        scanf("%d", G2T);
        if (*G2T >= 0 && *G2T <= 10)
        {
            break;
        }
    }
    while(1)
    {

        printf("Enter C++ grade :");
        scanf("%d", G3T);
        if (*G3T >= 0 && *G3T <= 10)
        {
            break;
        }
    }
    *avg = (*G1T + *G2T + *G3T)/3;
    *UT[*TT] = *ET;
    *sT = 1;
}
    else
{
    printf("Enter username: ");
    scanf("%s", &LU);
    for (ID = 0; ID < 100; ID++)
    {
        if (strncmp(LU, UT[ID], 20) == 0)
        {
            break;
        }
    }
    if (ID == 100)
    {
        return 0;
    }
    else
    {
        printf("Enter password: ");
        scanf("%s", LU);

    }

}

return 0;
}




void pass(char** User, int** Pass, int* Total)
{
int cd[21];
int i, j;

for (i=0; i<21; i++)
{
    cd[i] = *User[i];
    if (i%2 == 0)
    {
        if(cd[i] >= 97 && cd[i <= 122])
        {
            cd[i] = cd[i] - 32;
        }
    }
    else
    {
        if(cd[i] >= 65 && cd[i] <= 90)
        {
            cd[i] = cd[i] + 32;
        }
    }

}


}
















int main(void) {

int i, j, z;
int succ, *sT;
char intro[9], *status;
int Total = 0;
int* TT;
int LoggedIn = 0;
int* LI;
char Ep[100][21], *ET, On[100][21], *OT;
int Age[100], *AgeT, Gr1[100], *G1T, Gr2[100], *G2T, Gr3[100], *G3T, avg[100], *avgT;
char UN[100][21], *UT[100];
int PW[100][21], *PT[100];


while(1)
{
    system("cls");
    if (succ = 0)
    {
        printf("ERROR: Last name found.");
    }
    succ = 1;
    while(1)
    {
        printf("Type your option (Login/Register): ");
        scanf("%s", intro);
        if ((strcmp (intro, "Login") == 0) || (strcmp (intro, "Register") == 0))
        {
            break;
        }
    }

    if ((strcmp (intro, "Login") == 0) || (strcmp (intro, "Register") == 0))
    {
        for(i = 0; i < 100; i++)
        {
            UT[i] = &UN[i][0];
            PT[i] = &PW[i][0];
        }
        ET = &Ep[Total][0];
        OT = &On[Total][0];
        G1T = &Gr1[Total];
        G2T = &Gr2[Total];
        G3T = &Gr3[Total];
        avgT = &avg[Total];
        LI = &LoggedIn;
        status = &intro[0];
        sT = &succ;
        TT = &Total;
        signup(ET, OT, Gr1, Gr2, Gr3, avg, status, LI, sT, TT, UT, PT);
        for(i = 0; i<Total; i++)
        {
            if(strncmp(UN[Total], UN[i], 20) == 0)
            {
                succ = 0;
            }
        }
        if (succ == 1)
        {
        pass(UT, PT, TT);
        Total++;
        }
    }
}

return 0;
}

我的输入示例如下:

注册 姓 名 4 5 6

然后:

注册 姓 FN2 7 6 5

我希望看到“错误:找到姓氏”。就在起始消息的上方。但是,它从未出现,表明 strcmp 失败。

最佳答案

首先,您在 main() 中的局部变量中分配了大量数组。这可能会导致堆栈溢出。您可能应该使用 malloc() 来分配它们。

其次,这一行是赋值,而不是比较,这是一个错误:

if (succ = 0)

如果你想进行比较,请将其更改为:

if (succ == 0)

第三,您没有在 main() 开头初始化 succ,这是一个错误。

如果我看到任何其他可疑的内容,我会更新我的答案。但首先要解决这些问题。

关于c - strcmp 拒绝工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48100429/

相关文章:

python - 为什么python中的字符串比较如此之快?

c - 在C中如何验证输入值只是正数?

c++ - 如何声明一个空的 char* 并动态增加大小?

c - C 中 strcmp() 的问题

检查c中字符串的第一个字母

c - 链表中的 strncmp

java - 如何获取 JNA 中 native 库的指针?

c - 结构点作为函数 C 的参数

c - strcmp 忽略重音,输出 false

linux-kernel - strcmp 内核模块内部崩溃