功能未返回预期值

时间:2017-03-03 05:54:55

标签: c function

我已经练习C已经有好几个星期了,我正试着弄清楚我的代码可能做错了什么。

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

typedef struct accounts{
    char unList[32];
    int pinList;
    float amtList;

}account;

int isValid(char inputUN[], account acount[]);
void initialize(account acount[], char unList[][10], int pinList[], float amtList[], int size);





int main(int argc, char *argv[]) {
    int size = 10;

    account newAccs[size];
    char unList[][10] = {"franklin", "woods", "phillips", "gomez", "burns", "porter", "griffin", "spencer", "hanson", "johnson"};


    char inputUN[32];
    int index;

    initialize(newAccs, unList, pinList, amtList, size);

    printf("Enter Username: ");
    scanf("%s", inputUN);




    index = isValid(inputUN, newAccs);
    printf("%d\n", index);


return 0;   
}

void initialize(account acount[], char unList[][10], int pinList[], float amtList[], int size){
    int index;

    for(index = 0; index < size; index++){
        strcpy(acount[index].unList, unList[index]);
        acount[index].pinList = pinList[index];
        acount[index].amtList = amtList[index];
    }
}



int isValid(char inputUN[], account acount[] ){

    int index;
    int y;

    for(index = 0; index < 10; index++){
        if (strcmp(acount[index].unList, inputUN ) == 0){
            y = index;
        }else{
            y= -1;

        }

    }

return y;
}

我真正想在这个程序中做的是程序要求输入用户名和Pin然后它检查两者是否在结构中然后它显示了一些数量,但我已经省略了其余的代码因为我的问题出在isValid()函数......

 int isValid(char inputUN[], account acount[] ){

    int index;
    int y;

    for(index = 0; index < 10; index++){
        if (strcmp(acount[index].unList, inputUN ) == 0){
            y = index;
        }else{
            y= -1;

        }

    }

return y;
}

在此函数中,如果用户名在结构中,则返回元素的索引,否则返回-1。如果我在else if语句中添加注释,它的效果很好。但如果没有,即使我输入了正确的元素,它总是返回-1

我可能做错了什么?

P.S。对不起如果我的问题太长了,我对Stacks Overflow来说还是新手

2 个答案:

答案 0 :(得分:1)

问题在于,当您找到匹配的记录时,您永远不会退出循环。

int isValid(char inputUN[], account acount[] ){

    int index;

    for(index = 0; index < 10; index++){
        if (strcmp(acount[index].unList, inputUN ) == 0){
            return index; // return directly
        }
    }

    return -1;
}

答案 1 :(得分:0)

找到匹配后,您应该通过添加for语句来突破break;循环。否则,除非它与最后一个选项匹配,否则它将返回-1。像这样:

int isValid(char inputUN[], account acount[] ){

int index;
int y;

for(index = 0; index < 10; index++){
    if (strcmp(acount[index].unList, inputUN ) == 0){
        y = index;
        break;
    }else{
        y= -1;

    }

}

return y;
}

或者您可以将y初始化为-1并对其进行测试,如下所示:

int isValid(char inputUN[], account acount[] ){

int index;
int y = -1;

for(index = 0; index < 10 && y == -1; index++){
    if (strcmp(acount[index].unList, inputUN ) == 0){
        y = index;
    }else{
        y= -1;

    }

}

return y;
}