我已经练习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来说还是新手
答案 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;
}