我已经尝试了所有东西,但是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 = ≻
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 五 6
然后:
注册 姓 FN2 7 6 5
我希望看到&#34; ERROR:找到姓氏。&#34;在正在开始的消息之上。然而,它永远不会出现,暗示strcmp失败了。
答案 0 :(得分:2)
首先,您在main()
的本地变量中分配了大量数组。这可能导致堆栈溢出。您应该使用malloc()
代替它们。
其次,这一行是作业,而不是比较,这是一个错误:
if (succ = 0)
如果您希望将其作为比较,请将其更改为:
if (succ == 0)
第三,您没有在succ
的开头初始化main()
这是一个错误。
如果我发现其他任何可疑的内容,我会更新我的回答。但首先要解决这些问题。
答案 1 :(得分:0)
正如所指出的那样,您的代码存在一些问题,但它无法按预期运行的原因是:if(succ = 0)
我将其更改为:if(succ==0)
它就像你描述的那样有效。
此处此行:scanf("%s", &LU);
应为scanf("%s", LU);
编译器可能会生成有关格式的警告。