如何解决如何遍历字符串数组,将每个字符串与c
这是我尝试遍历字符串数组的情况。
我创建了一个ID数组, 将每个ID与从控制台读取的选民ID进行了比较。
// helper function
int verifyVoterID(char *uidDB[],char *voterID)
{
for (int i = 0; i < sizeof(uidDB[0]); i++)
{
if (uidDB[0][i] == voterID)
return 0;
}
return 1;
}
int main()
{
char *uidDB[] = {"001","002","003"},*voterID;
printf("\n\nEnter ID: ");
scanf("%s",voterID);
// Verify voter's ID
if (voterID)
verifyVoterID(uidDB,voterID) == 0
? doSomthing()
: doSomethingElse();
return 0;
}
输出:
./03.c: In function 'verifyVoterID':
./03.c:19:21: warning: comparison between pointer and integer
19 | if (uidDB[0][i] == voterID)
|
我还尝试使用strcmp()
进行比较
int verifyVoterID(char *uidDB[],char *voterID)
{
for (int i = 0; i < sizeof(uidDB[0]); i++)
{
if (strcmp(uidDB[0][i],voterID) == 0)
return 0;
}
return 1;
}
输出:
./03.c: In function 'verifyVoterID':
./03.c:19:24: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast [-Wint-conversion]
19 | if (strcmp(uidDB[0][i],voterID) == 0)
| ~~~~~~~~^~~
| |
| char
我想念什么?
解决方法
从我的角度来看,有很多事情需要修改,我将发布以下带有一些注释的代码。我希望这可以帮助你。在VS2019上进行了测试。
// return 0 if uidDB[i]==voterID,-1 if no match found
// I added const keyword since we're not going to change uidDB or voiterID in the function(read-only)
int verifyVoterID(const char* uidDB[],int uidLen,const char* voterID)
{
for (int i = 0; i < uidLen; ++i)
{
if (!strcmp(uidDB[i],voterID)) // same as strcmp()==0.
return 0;
}
return (-1);
}
int main(void)
{
char voterID[8]; // NOT char* voterID;
printf("\n\nEnter ID: ");
scanf("%3s",voterID); // read 3 characters only.
const char* uidDB[] = { "001","002","003" }; // must be array of const char*
const int uidDBLen = (sizeof(uidDB) / sizeof(uidDB[0])); // practical way to cal. size of array
int verify_res = verifyVoterID(uidDB,uidDBLen,voterID); // always pass the size of array together with the array
if (verify_res == 0)
doSomething(); // verify success
else
doSomethingElse(); // fail
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。