2012-09-29 1 views
0

방금 ​​배열에 대해 알게되었습니다. 배열을 사용하여 데이터베이스 프로그램을 만들려고했습니다. 아주 기본적인 프로그램입니다.배열을 사용하는 C의 기본 데이터베이스와 유사한 프로그램

#include<stdio.h> 
#define N 1 //number of entries needed 
int main() 
{ 
    int i, k = 1, l = 1, w, x = 0, y = 0; 
    int rollnum[N], hsc[N], cet[N], a[N], b[N]; 
    char name[100], city[100], c; 
    for(i = 0; i < N; i++) 
    { 
     printf("%d.\n", (i+1)); 
     printf("Enter first name : "); 
     do 
     { 
      c = getchar(); 
      if(c != '\n') 
      { 
      name[k] = c; 
      k++; 
      } 
     } 
     while(c != '\n'); 
     a[i] = k; 
     k++; 
     printf("\n"); 
     printf("Enter roll number : "); 
     scanf("%d", &rollnum[i]); 
     printf("\n"); 
     getchar(); 
     printf("Enter city : "); 
     do 
     { 
      c = getchar(); 
      if(c != '\n') 
      { 
      city[l] = c; 
      l++; 
      } 
     } 
     while(c != '\n'); 
     b[i] = l; 
     l++; 
     printf("\n"); 
     printf("Enter HSC percentage : "); 
     scanf("%d", &hsc[i]); 
     printf("\n"); 
     printf("Enter CET marks : "); 
     scanf("%d", &cet[i]); 
     printf("\n"); 
     getchar(); 
    } 

printf("\n\n\n"); 
k = 1; 
l = 1; 
for(i = 0; i < N; i++) 
{ 
    printf("Entry %d\n", (i+1)); 
    printf("Student Name : "); 
    x = (a[i] - x); 
    for(w = 0; w < x; w++ && k++) 
     putchar(name[k]); 
    putchar('\n'); 
    printf("Roll number : %d", rollnum[i]); 
    printf("\n"); 
    printf("City : "); 
    y = (b[i] - y); 
    for(w = 0; w < y; w++ && l++) 
     putchar(city[l]); 
    putchar('\n'); 
    printf("Marks : \n"); 
    printf("\t"); 
    printf("HSC : %d ", hsc[i]); 
    printf("\t"); 
    printf("CET : %d/200", cet[i]); 
    printf("\n\n\n"); 
} 
return 0; 
} 

프로그램이 원하는 방식으로 작동하지 않습니다! 이름을 입력하면 첫 글자가 두 번 인쇄됩니다. 똑같은 도시입니다! 'N'을 수정하여 2 개의 항목을 넣으면 두 번째 항목의 이름과 주소의 첫 글자를 쓰레기 값으로 가져옵니다. 나는 나의 논리에서 어떤 오류라도 있다고 생각하지 않는다. 왜냐하면 나는 그것을 내 노트북에서 수동으로 시도했기 때문에 나는 그것에 결함을 발견하지 못했다.

누구든지 실수를 찾을 수있게 도와 줄 사람이 있습니까? 나는 프로그램이 전혀 좋지도 효율적이지 않을 수도 있음을 알고 있지만, 나는 배운 것들을 시험하고있다.

답변

2

일부 변수를 초기화하는 데 실수가 있습니다. 또한 한 번에 한 문자 씩 문자열을 읽을 필요도 없습니다. scanf("%s", someString)을 사용하여 전체 문자열을 읽을 수 있습니다.

#include<stdio.h> 
#define N 2 
int main() 
{ 
    int rollnum[N], hsc[N], cet[N], i; 
    char name[100][100], city[100][100]; 
    for(i = 0; i < N; i++) 
    { 
     printf("%d.\nEnter first name : ", (i+1)); 
     scanf("%s", name[i]); 
     printf("\nEnter roll number : "); 
     scanf("%d", &rollnum[i]); 
     printf("\nEnter city : "); 
     scanf("%s", city[i]); 
     printf("\nEnter HSC percentage : "); 
     scanf("%d", &hsc[i]); 
     printf("\nEnter CET marks : "); 
     scanf("%d", &cet[i]); 
     printf("\n"); 
    } 

printf("\n\n\n"); 

for(i = 0; i < N; i++) 
{ 
    printf("Entry %d\nStudent Name : %s\nRoll number : %d\nCity : %s\nMarks : \n\tHSC : %d \tCET : %d/200\n\n\n", (i+1), name[i], rollnum[i], city[i], hsc[i], cet[i]); 
} 

return 0; 
} 

그것은 너무 여러 항목에 대해 작동합니다

그리고 여기가 더 많은 청소기를 보이는 작업 코드입니다. 이와

x = (a[i] - x); 
    for(w = 0; w < x; w++ && k++) 
     putchar(name[k]); 
    putchar('\n'); 
    printf("Roll number : %d", rollnum[i]); 
    printf("\n"); 
    printf("City : "); 
    y = (b[i] - y); 
    for(w = 0; w < y; w++ && l++) 
     putchar(city[l]); 

: 위해

는이를 교체해야 프로그램 작업을 만들기 위해

if (i == 0) 
    x = a[i]-1; 
else 
    x = a[i] - a[i-1]; 
for(w = 0; w < x; w++) 
    putchar(name[k++]); 
putchar('\n'); 
printf("Roll number : %d", rollnum[i]); 
printf("\n"); 
printf("City : "); 
if (i == 0) 
    y = b[i]-1; 
else 
    y = b[i] - b[i-1]; 
for(w = 0; w < y; w++) 
    putchar(city[l++]); 

문제가 올바르게 단어의 길이를 계산하지 않았다고했다, 또한 내가 설명 할 수없는 또 다른 오류가 있지만 그것을 제거했습니다.

관련 문제