2016-07-22 10 views
-1

Ich erstelle eine Funktion findBookID. Wenn ich versuche, die Buch-ID in eine Ganzzahl zu konvertieren, wird mir ein Fehler angezeigt.
kann mir jemand eine lösung zur lösung geben? Grüße.
Der Fehler ist zuletzt in der Post.kann char nicht in int konvertieren, wenn atoi verwendet

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; 
} 

Hier ist, wie ich die Funktion

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; 
} 

Voll Codierung für Referenz erklären: https://drive.google.com/open?id=1zHc_26kFPVHs0b99-gkX1hdQ3AYykCPL9KegI5QobdY

Dies ist die Fehlermeldung: Funktionsaufruf erlauben keinen konstanten Ausdruck enter image description here

+0

"es zeigt mir den Fehler". Was genau ist "es" und was ist "der Fehler"? Kompilierfehler? Laufzeit Fehler? Zeigen Sie den genauen Fehler an. – kaylum

+0

Könnten Sie ein kleines verifizierbares Beispiel Ihres Codes posten? Haben Sie versucht, Ihren Code über einen Debugger auszuführen, um zu sehen, was in bookId passiert, wenn Sie atoi durchlaufen? – dvhh

+0

Fügen Sie in Ihrem Top-Beispiel ein Beispiel 'source' 'pos_text'' len_text' hinzu. – dvhh

Antwort

2

Ein Hauptproblem vieler IDEs ist das Fehlen von lesbaren Warnungen. Wenn ich versuche, den Code zu kompilieren (Google ist nicht gut für Code, Ihren Eintrag leidet unter C & P-Fehler) mit GCC bekomme ich folgende Fehler:

$ 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 

Für die ersten Fehler ändern scanf("%s", &book.name);-scanf("%s", book.name);

der Typo printf("%c, c"); sollte printf("%c", c); sein

comparison between signed and unsigned integer kann jetzt ignoriert werden (sollte aber später repariert werden, natürlich!)

Wenn Sie keine Variable benötigen, können Sie sie auskommentieren.

Der letzte, der fatale Fehler, hat seine Ursache mit einer Funktion namens Search() mit dem Namen search(). C unterscheidet zwischen Groß- und Kleinschreibung.

Die Groß- und Kleinschreibung spielt auch eine große Rolle bei der Suche: Sie speichern die Datei booklist.txt, möchten aber von BookList.txt lesen (funktioniert das noch in Windows?).