float x; for (int i = 0; i < NUM_ITEMS; i++) { if (strcmp(tolower(item), tolower(menu[i].item)) == 0) { x = menu[i].price; break; } }
字符串我试图通过将item和menu[i].item都转换为来比较它们
li9yvcax1#
在使用一个函数之前,请务必阅读函数说明。函数tolower的声明方式如下
tolower
#include <ctype.h> int tolower(int c);
字符串正如你所看到的,它返回一个int类型的对象,并接受整数。但似乎你传递给函数的是字符串(作为字符数组或指针)。所以编译器发出消息。函数strcmp也声明为
int
strcmp
#include <string.h> int strcmp(const char *s1, const char *s2);
型也就是说,它期望指向char的指针作为参数。但是在这个if语句中,
if (strcmp(tolower(item), tolower(menu[i].item)) == 0)
型不是将指向字符串的指针(指向它们的第一个字符)传递给函数strcmp,而是传递由函数tolower返回的整数。看起来你需要自己写一个函数来比较两个字符串,其中的字符被转换为小写。
int str_tolower_cmp( const char *s1, const char *s2 ) { unsigned char c1 = tolower( ( unsigned char )*s1 ); unsigned char c2 = tolower( ( unsigned char )*s2 ); while ( c1 && c1 == c2 ) { c1 = tolower( ( unsigned char )*++s1 ); c2 = tolower( ( unsigned char )*++s2 ); } return ( c2 < c1 ) - ( c1 < c2 ); }
型然后
if ( str_tolower_cmp( item, menu[i].item ) == 0 ) //...
型否则,如果名称为item的对象的类型为char,则只需写入
item
char
if ( tolower(( unsigned char )item) == tolower(( unsigned char )menu[i].item))
型或者,如果变量item的类型为char,而menu[i].item表示一个字符串,那么可以这样写:
menu[i].item
if ( tolower(( unsigned char )item) == tolower(( unsigned char )menu[i].item[0]))
型
1条答案
按热度按时间li9yvcax1#
在使用一个函数之前,请务必阅读函数说明。
函数
tolower
的声明方式如下字符串
正如你所看到的,它返回一个
int
类型的对象,并接受整数。但似乎你传递给函数的是字符串(作为字符数组或指针)。所以编译器发出消息。
函数
strcmp
也声明为型
也就是说,它期望指向char的指针作为参数。
但是在这个if语句中,
型
不是将指向字符串的指针(指向它们的第一个字符)传递给函数
strcmp
,而是传递由函数tolower
返回的整数。看起来你需要自己写一个函数来比较两个字符串,其中的字符被转换为小写。
型
然后
型
否则,如果名称为
item
的对象的类型为char
,则只需写入型
或者,如果变量
item
的类型为char
,而menu[i].item
表示一个字符串,那么可以这样写:型