gpt4 book ai didi

arrays - 在带有数组的语句中使用 OR,(C)

转载 作者:行者123 更新时间:2023-12-05 01:04:11 25 4
gpt4 key购买 nike

我一直在尝试创建一个用户名和密码界面,我想知道是否可以在 strcmp 中有一个 or 语句,以及我是否也可以使用 1 内的数组的所有值字符串,谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main(int argc, char *argv[]) {
int u, p;
char Iuser[50],Ipass[50];
char user[3][50] = { "user1", "user2", "user3" };
char pass[3][50] = { "pass1", "pass2", "pass3" };

printf("\n Enter your username:");
gets(Iuser);
u = strcmp(user[0|1|2], Iuser);
if (u == 0) {
printf("\n Enter your password");
scanf("%s", &Ipass);
} else {
printf("\n Invalid Username, Try Again !");
}
}

最佳答案

不,你不能在 C 中那样做。

我在窃取 Aconcagua 关于其实际作用的评论:

user[0|1|2] first calculates 0|1|2, then accesses the array. Result of bitwise OR-ing 0, 1 and 2 is 3, though, which already is out of bounds of your user array, thus undefined behaviour

所以,而不是

u=strcmp(user[0|1|2],Iuser);
if(u==0) {

你应该这样做:

#include <stdbool.h>

bool u = strcmp(user[0], Iuser) == 0 ||
strcmp(user[1], Iuser) == 0 ||
strcmp(user[2], Iuser) == 0;
if(u) {

如果用户数组很长或者编译时用户数未知:

bool u = false;
for(int i = 0; i < number_of_users; ++i) {
if(strcmp(user[i], Iuser) == 0) {
u = true;
break;
}
}
if(u) {

注意:不要按位使用 OR , | , 对于这些比较。使用逻辑 OR , || , 启用 short-circuit evaluation以便在一个条件为 true 时立即停止测试,就像上面的循环 break发现一个条件后立即退出 true .

关于arrays - 在带有数组的语句中使用 OR,(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72612162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com