使用 atoi 时无法将 char 转换为 int
cannot convert char to int when using atoi
我正在创建一个函数 findBookID
。当我尝试将图书 ID 转换为整数时,它显示错误。
任何人都可以为我提供解决方案来解决这个问题吗?问候。
错误最后出现在 post.
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
这是错误信息:函数调用不允许常量表达式
许多 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 中仍然有效吗?)。
我正在创建一个函数 findBookID
。当我尝试将图书 ID 转换为整数时,它显示错误。
任何人都可以为我提供解决方案来解决这个问题吗?问候。
错误最后出现在 post.
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
这是错误信息:函数调用不允许常量表达式
许多 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 中仍然有效吗?)。