2016-11-09 4 views
-2

Я новичок в C, и я хочу создать библиотеку со входами, это название, автор и год публикации книги. и выходы - это код полки (сокращенный заголовок), код книги (первая буква названия книги и первая буква автора), название, авторский и книжный год выпуска. если я введу «C Как программировать» в заголовке, поэтому код полки должен печатать «CHtP». и возникает вопрос: когда я печатаю код полки, в моей программе напечатан странный символ. Пожалуйста, помогите ..weird array string output

int main() 
{ 
    char title[5][200], author[5][200], shelf[5][200], bookcode[5][200], temp[200]; 
    int year; 

    printf("Welcome to Blues Library\n"); 
    printf("============================\n\n"); 

    for(i = 0; i < 2; i++) 
    { 
     printf("Book's Title = "); 
     scanf("%[^\n]s", &title[i]); fflush(stdin); 
     printf("Book's Author = "); 
     scanf("%[^\n]s", &author[i]); fflush(stdin); 
     printf("Book's publishing year = "); 
     scanf("%d", &year); fflush(stdin); 
     printf("\n"); 
    } 

    printf("\n"); 
    for(i = 0; i < 2; i++) 
    { 
     for(j = 0; j < strlen(title[i]); j++) 
     { 
      if(j == 0) 
      { 
       shelf[i][j] = title[i][j]; 
      } 
      else if(title[i][j-1] == ' ') 
      { 
       shelf[i][j] = title[i][j]; 
      } 
     } 
    } 
    //print 
    for(i = 0; i < 2; i++) 
    { 
     printf("Book's Title = %s\n", title[i]); 
     printf("Book's Author = %s\n", author[i]); 
     printf("Book's publishing year = %d\n", year); 
     printf("Shelf Code = %s\n", shelf[i]); 

    } 

} 
+3

'fflush (STDIN)' плохо (неопределенное поведение). –

+3

даже badder: 'scanf ("% [^ \ n] s ", & title [i])' должен быть 'scanf ("% [^ \ n] s ", title [i])'. то же самое для 'author' и всех строк BTW –

+1

сначала лучше иметь рабочую программу, вставленную :-) во-вторых, проблема в вашем' scanf'; так как вы вводите строки для 'title' и' author' (которые обозначаются символьными массивами), '' '' '' не нужно перед ними в 'scanf'. как @PaulR сказал, что вы не должны использовать 'fflush (stdin)' ... нет необходимости в этом –

ответ

0

Проблемы в том, что вы никогда не прекращаете строки в shelf[][] и вы не отслеживаете индекс в shelf[i][] правильно. (Это также не ясно, где вы объявляете i и j.) Попробуйте эту внутреннюю петлю вместо:

for (i = 0; i < 2; i++) 
{ 
    int k = 0; 

    for (j = 0; j < strlen(title[i]); j++) 
    { 
     if (j == 0 || title[i][j - 1] == ' ') 
     { 
      shelf[i][k++] = title[i][j]; 
     } 
    } 

    shelf[i][k] = '\0'; 
} 
+0

, он работает. Спасибо за вашу помощь!! я очень ценю это –