2017-03-03 3 views
0

저는 지금 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; 
} 

내가 정말이 프로그램을 수행하려고하면 프로그램이 사용자 이름 입력을 요청하고 모두 구조에 후 일부 금액을 표시하는 경우 핀 다음이 검사,하지만 난이를 ommitted 점이다 사용자 이름이 구조에있는 경우 내 문제는 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. 죄송합니다. 질문이 너무 길어서 스택 오버플로가 매우 어려웠습니다.

+0

'초기화'기능은 어디에 있습니까? – haccks

+0

오, 미안 .. 내가 추가 할 것입니다 ... –

+0

y = index에 중단 점을 넣으려고 했습니까? 또한 할당 된 후에는 루프를 깨뜨리거나 다음을 -1로 재 할당 할 수 있습니다. – koksalb

답변

0

일치 항목을 찾으면 break; 문을 추가하여 for 루프에서 탈출해야합니다. 그렇지 않으면 마지막 옵션과 일치하지 않으면 -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; 
} 

또는 당신은이 같은 그것에 대한 -1y 및 테스트를 초기화 할 수 있습니다 :

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; 
} 
+0

당신의 솔루션은 여전히 ​​else 절이 있기 때문에 여전히 작동하지 않습니다 –

+0

@ChrisTurner 확실히 중복되었지만 다음 반복 이전에 어떤 부작용이 발생해서는 안됩니다. – MotKohn

+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; 
} 
관련 문제