2014-04-28 2 views
0

오른쪽 그래서 난 점수가 서로 allign하지 않는 것을 제외하고, 완벽하게 사용자 이름, 암호 및 점수의 데이터베이스를 생성하고 여기에 내 코드 조각이 작동하지 않습니다, 이것은 분명히 때문이다 문제는 문자열 길이 함수를 사용하여 값을 저장하는 임시 변수를 만들려고 시도하고 다른 쓰레기 이동은 더 심하게 만드는 것 같습니다.C 데이터베이스 번호 출력

#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
void addscores(void); 
void intmount(void); 
FILE *faa; 
FILE *fab; 
FILE *fac; 
FILE *fu; 
FILE *fp; 
FILE *fs; 
int temp; 
int i3=0; 
int DataCount=1; 
int total=0; 

struct store3 
{ 
int def3; 
}stock3[128]; 

int main() 
{ 

    faa=fopen("Test 01 Scores.txt","r"); 
    fab=fopen("Test 02 Scores.txt","r"); 
    fac=fopen("Test 03 Scores.txt","r"); 


      struct store 
      { 
      char def[128]; 
      }stock[128]; 

      struct store2 
      { 
      char def2[128]; 
      }stock2[128]; 


     //int DataCount=1; 
     int i=0; 
     int i2=0; 

     int tick; 

     fu=fopen("Student Usernames.txt","r"); 
     fscanf(fu,"%127[^\n]%*c", stock[DataCount].def); 
     for(i=0; stock[DataCount].def[i]!='\0'; ++i); 

     fp=fopen("Student Passwords.txt","r"); 
     fscanf(fp,"%127[^\n]%*c", stock2[DataCount].def2); 
     for(i2=0; stock2[DataCount].def2[i2]!='\0'; ++i2); 

     addscores(); 
     //intmount(); 
     printf("|Username"); 
     printf("  |"); 
     printf("Password"); 
     printf("  |"); 
     printf("Total Score  |"); 
     printf("\n+----------------+----------------+----------------+\n"); 


     do 
     { 
        printf("|%s", stock[DataCount].def); 
        i=16-i; 
        for(tick=0; tick<i;tick++) 
        { 
           printf(" "); 
        } 



        printf("|%s", stock2[DataCount].def2); 
        i2=16-i2; 
        for(tick=0; tick<i2;tick++) 
        { 
           printf(" "); 
        } 


        printf("|"); 

        i3=16-i3; 
        for(tick=0; tick<i3;tick++) 
        { 
           printf(" "); 
        } 
        printf("%d|\n",total); 

        DataCount=DataCount+1; 

        fscanf(fu,"%127[^\n]%*c", stock[DataCount].def); 
        for(i=0; stock[DataCount].def[i]!='\0'; ++i); 

        fscanf(fp,"%127[^\n]%*c", stock2[DataCount].def2); 
        for(i2=0; stock2[DataCount].def2[i2]!='\0'; ++i2); 

        addscores(); //fscanf for scores 
        //intmount(); //char count for scores     

    } 
    while(!feof(fu)); 
    printf("|%s", stock[DataCount].def); 
    i=16-i; 
    for(tick=0; tick<i;tick++) 
    { 
       printf(" "); 
    } 


    printf("|%s", stock2[DataCount].def2); 
    i2=16-i2; 
    for(tick=0; tick<i2;tick++) 
    { 
       printf(" "); 
    } 
    // intmount(); 
    printf("|"); 
    i3=16-i3; 
    for(tick=0; tick<i3;tick++) 
    { 
       printf(" "); 
    } 
    printf("%d|\n",total); 


    DataCount=DataCount+1; 

    fscanf(fu,"%127[^\n]%*c", stock[DataCount].def); 
    for(i=0; stock[DataCount].def[i]!='\0'; ++i); 


    fscanf(fp,"%127[^\n]%*c", stock2[DataCount].def2); 
    for(i2=0; stock2[DataCount].def2[i2]!='\0'; ++i2); 


    addscores(); 
    //intmount(); 


    fclose(faa); 
    fclose(fab); 
    fclose(fac); 

    fclose(fu); 
    fclose(fp); 
    fclose(fs); 
    getch(); 
} 

void addscores(void) 
{ 
total=0; 
fscanf(faa,"%d", &stock3[DataCount].def3); 
total=total+stock3[DataCount].def3; 
fscanf(fab,"%d", &stock3[DataCount].def3); 
total=total+stock3[DataCount].def3; 
fscanf(fac,"%d", &stock3[DataCount].def3); 
total=total+stock3[DataCount].def3; 
} 




void intmount(void) 
{ 
for (i3 = 0; total!=0; i3++, total/=10){} 
printf(" Number of digits: %d\n",i3); 
} 

파일은 다음과 같이 구성 :

Pig 
Sheep 
Beef 
Cat 
Wolf 

Pork 
Wool 
Beef 
Fish 
Bone 

1 
2 
3 
4 
5 

(for all 3 scores) 

명 내 파일이나 형식이나 레이아웃에 대해 쓰기 시작하기 전에 내가이 잘못 그런 아마 몇 가지가 있지만 아직 나에게 문제가되지이다 알고 , 내가 필요로하는 공간은 고정되어있다. 그런 다음, 완성 된 멋진 프로그램을 편집 할 것이다.

답변

0

루프 구조가 엉망, 당신은 루프 전에 루프 내부에서 코드의 전체 무리를 복제. 그냥 루프에서 한 번 수행하고 while(!feof)를 사용하지 않는, 그것은 거의 항상 실수. 대신, fscanf 통화 성공 여부를 확인하고, 그들이 실패하는 경우 탈출.

strlen으로 전화를 걸어 for(i2 행을 대체하고 필요할 때까지 코드를 읽지 않으면 코드가 훨씬 더 읽기 쉽습니다. i3이 무엇을 의미하는지 이해할 수 없습니다. 당신의 공간에 대해서는

, 당신은 printf 정당화 옵션을 사용한다, 예를 들어,

printf("%16s", foo);   // right-justified, print at least 16 chars 
printf("%-16s", foo);   // left-justified, print at least 16 chars 
printf("%16.16s", foo);  // right-justified, print exactly 16 chars 
printf("%-16.16s", foo);  // you can guess this one 

당신도 이러한 호출 대신 변수 이름의 ""을 사용할 수 있습니다. 문제가 계속되면

그러면 점점 실제 출력을 게시하고 당신이보고 싶은 다르다 방법을 설명합니다.