2016-07-22 6 views
-1

Я создаю функцию findBookID. Когда я пытаюсь преобразовать id книги в целое число, это показывает мне ошибку.
может ли кто-нибудь предоставить мне решение для решения этой проблемы? С уважением.
Ошибка последнего в сообщении.не может преобразовать char в int при использовании atoi

strncpy(bookId, source + pos_text + 1, len_text - pos_text); 
int i = atoi(bookId);  //atoi converts the string to integer 
if (id == i) 
{ 
    return true; 
} 

Вот как я объявляю функции

bool findBookId(char source[], int id) 
{ 
    char input[10] = "Book ID: "; 
    char bookId[5]; 
    int int_id = 0; 
    int pos_search = 0; 
    int pos_text = 0; 
    int len_search = 10; 
    size_t len_text = strlen(source); 
    if (len_search < len_text) 
    { 

     for (pos_text = 0; pos_text < len_search - 1; ++pos_text) 
     { 
      if (source[pos_text] == input[pos_search]) 
      { 

       ++pos_search; 
       if (pos_search == len_search - 1) 
       { 
        // match 

        strncpy(bookId, source + pos_text + 1, len_text - pos_text); 
        int i = atoi(bookId);  //atoi converts the string to integer 
        if (id == i){ 
         return true; 
        } 


       } 
      } 
      else 
      { 
       pos_text -= pos_search; 
       pos_search = 0; 
      } 
     } 
    } 
    return false; 
} 

Полное кодирование для справки: https://drive.google.com/open?id=1zHc_26kFPVHs0b99-gkX1hdQ3AYykCPL9KegI5QobdY

Это сообщение об ошибке: вызов функции не позволяют константного выражения enter image description here

+0

«это покажет мне ошибку». Что именно «это» и что такое «ошибка»? Ошибка компиляции? Ошибка выполнения? Покажите точную ошибку. – kaylum

+0

Не могли бы вы разместить небольшой проверяемый образец вашего кода, попробовали ли вы запустить свой код через отладчик, чтобы узнать, что находится в bookId при переходе через atoi? – dvhh

+0

Возможно, в вашем верхнем примере добавьте образец 'source'' pos_text' 'len_text' значения – dvhh

ответ

2

Основная проблема многих IDE - отсутствие четких предупреждений. Если я пытаюсь скомпилировать код (Google не подходит для кода, ваша запись страдает от C & ошибок P) с GCC я получаю следующие ошибки:

$ gcc -g3 -std=c11 -W -Wall bookid.c -o bookid 
bookid.c: In function ‘addbook’: 
bookid.c:106:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat=] 
    scanf("%s", &book.name); 
^
bookid.c: In function ‘editbook’: 
bookid.c:180:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat=] 
    scanf("%s", &book.name); 
^
bookid.c: In function ‘deletebook’: 
bookid.c:270:5: warning: format ‘%c’ expects a matching ‘int’ argument [-Wformat=] 
    printf("%c, c"); 
    ^
bookid.c: In function ‘findBookId’: 
bookid.c:469:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] 
    if (len_search < len_text) { 
       ^
bookid.c:464:7: warning: unused variable ‘int_id’ [-Wunused-variable] 
    int int_id = 0; 
    ^
/tmp/ccijPXxB.o: In function `main': 
bookid.c:85: undefined reference to `search' 
collect2: error: ld returned 1 exit status 

Для первых ошибок изменить scanf("%s", &book.name); к scanf("%s", book.name);

printf("%c, c"); опечатка должно быть printf("%c", c);

comparison between signed and unsigned integer можно пренебречь сейчас (но должны быть отремонтированы позже конечно!)

Если вам не нужна переменная, прокомментируйте ее.

Последняя, ​​фатальная ошибка имеет свою причину с функцией с именем Search(), называемой по имени search(). C чувствителен к регистру.

Чувствительность к регистру также играет большую роль в сломанном поиске: вы сохраняете файл booklist.txt, но хотите читать с BookList.txt (это все еще работает в Windows?).