2014-05-13 2 views
0

/s 다음에 영화 제목 (예 :/s Green Mile)을 입력하면 프로그램이 영화 배열에서 해당 영화 제목을 검색하지만 strstr과 기능이 작동하지 않습니다. 또한가/영화/r은 데이터베이스에있는 모든 영화를 보여줍니다/q는 프로그램을 종료 추가합니다.프로그래밍에서 2d 배열의 단어 검색

#include <stdio.h> 
#include <string.h> 
main() { 

    char movies[1000][64]; 
    int i; 
    int j = 1; 
    int k = 0; 
    int counter = 0; 
    char buffer[64]; 
    char buffer2[64]; 
    int len; 

    do { 
     printf("Enter command for movie database:\n"); 
     fgets(buffer, 64, stdin); 

     if (buffer[1] == 'a') { 
     len = strlen(buffer); 
     if (buffer[len - 1] == '\n') 
      buffer[len - 1] = '\0'; 

     for(i=3; i<sizeof(buffer); i++) { 
      movies[counter][k] = buffer[i]; 
      k++; 
     } 
     printf("You have chosen to enter a movie in the database.\n"); 
     printf("The movie added to the database is: %s\n", &movies[counter][0]); 
     counter++; 
     k = 0; 
     } 

     if (buffer[1] == 'q') { 
     printf("You have chosen to quit.\n"); 
     printf("Goodbye.\n"); 
     } 

     if (buffer[1] == 's') { 
     for(i=2; i<sizeof(buffer); i++) { 
      buffer2[k] = buffer[i]; 
      k++; 
     } 

     for (i = 0; i < counter; i++) { 
      if (strstr(movies[i], buffer2) != NULL) { 
       printf("Found %s in position %d,%s\n", buffer2, i + 1, movies[i]); 
       printf("Index of Movie is %d.\n", i + 1); 
      } 
     } 
     k = 0; 
     } 

     if (buffer[1] == 'r') { 
     printf("You have choosen to report movies in database\n"); 
     printf("These are the movies you have watched:\n"); 
     for(i = 0; i < counter; i++) { 
      printf("%d: %s\n", j, &movies[i][0]); 
     j++; 
     } 
     printf("\n"); 
     j = 1; 
     } 
    } while (buffer[1] != 'q'); 
} 
+0

귀하의 buffer2의 첫 번째 문자는 공간이 아니라이 제대로 NULL이 종료되었습니다. –

+0

그래서 내 카운터 변수 (i) 3에서 시작하고 버퍼가 null로 생각해야 할 것입니다 '\ 0'으로 시작한 다음 buffer2로 복사했습니다. – user3633960

+0

맞습니다. 전체 버퍼를 복사하는 것을 놓쳤습니다. strcpy (buffer2, & buffer [3])를 사용하는 것이 더 낫습니다. –

답변

0

개정 코드.

#include <stdio.h> 
#include <string.h> 
main() { 

    char movies[1000][64]; 
    int counter = 0; 
    char buffer[64]; 
    char * movieTitle = &buffer[3]; 

    while(true) { 
     printf("Enter command for movie database:\n"); 
     fgets(buffer, 64, stdin); 

     //replace terminator every time 
     int len = strlen(buffer); 
     if (buffer[len - 1] == '\n') 
      buffer[len - 1] = '\0'; 

     if(strstr(buffer, "/a") && counter < 1000) { 
     strcpy(movies[counter], movieTitle); 

     printf("You have chosen to enter a movie in the database.\n"); 
     printf("The movie added to the database is: %s\n", &movies[counter][0]); 
     counter++; 
     } 

     else if (strstr(buffer, "/s")) { 
     for (int i = 0; i < counter; i++) { 
      if (strcmp(movies[i], movieTitle) == 0) { 
       printf("Found %s in position %d,%s\n", movieTitle, i + 1, movies[i]); 
       printf("Index of Movie is %d.\n", i + 1); 
      } 
     } 
     } 

     else if (strstr(buffer, "/r")) { 
     printf("You have choosen to report movies in database\n"); 
     printf("These are the movies you have watched:\n"); 

     for(i = 0; i < counter; i++) { 
      printf("%d: %s\n", i + 1, &movies[i][0]); 
     } 
     printf("\n"); 
     } 

     else if (strstr(buffer, "/q")) { 
     printf("You have chosen to quit.\n"); 
     printf("Goodbye.\n"); 
     break; 
     } 

     else { 
      printf("unrecognized command"); 
     } 
    } 
}