许多IDE的一个主要问题是缺乏清晰的警告。如果我试图用GCC编译您的代码(Google不适合编写代码,您的条目会出现C&P错误),我会得到以下错误:
$ 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中仍然有效吗?)。