我需要循环一个循环直到它结束,但编译器继续循环,即使i> = = k并且我无法循环无限循环。这个片段有什么问题?
int i=0;
User signed_up[k]
char input_user[15];
bool stop_cycle=false;
do {
printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
stop_cycle=true;
for (i=0;i<k;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
}
stop_cycle=false;
}
} while (!stop_cycle);
编辑:k是一个计数器,每次运行时子程序注册都会增加。在代码的这一点上它可以是0,1,等等。 我想要实现的是每次插入一个已经存在的用户名时再次插入它,直到数组中的搜索结束。
答案 0 :(得分:1)
你到底想做什么?
您的代码采取的步骤在每次迭代中都将i变量重置为0,并且每次迭代都将stop_cycle设置为true和false。
每次迭代的for循环从i = 0到i <1。 ķ。
您可以通过每次将停止周期设置为false来结束此操作,因此while永远不会触发。
尝试将其作为:
运行printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
for (i=0;i<k;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
}
}
或
int i=0;
User signed_up[k]
char input_user[15];
bool stop_cycle=true;
do {
printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
stop_cycle=true;
for (i=0;i<k;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
stop_cycle=false;
}
}
} while (stop_cycle);
请注意停止循环变量的位置变化及其在第二个版本中的值。
答案 1 :(得分:0)
TL;博士
int i=0;
User signed_up[k];
char input_user[15];
bool stop_cycle=false;
do {
printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
stop_cycle=true;
for (i=0;i<k;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
stop_cycle=false;
}
}
} while (!stop_cycle);
更长的解释
如果这是你的情况......
所以你想让他们输入一个用户名。
如果用户名存在,您想再次询问(输入不同的用户名),并打印“用户名inseritogiàpresentenel database!”
您希望在用户输入不在“数据库”中的用户名之前继续这样做。
for
循环的目的是测试用户名(input_user
)是否已经在“数据库”中(即数组signed_up
)。
变量k
是User
数组中signed_up
个对象数的计数。
因此,for
循环遍历signed_up
数组中的所有值,以测试input_user
是否匹配username
对象的User
成员在阵列中。
如果input_user
与username
的现有User
匹配,则您希望继续在do while
循环中循环。
将stop_cycle
设置为true
将停止循环。
,然后... 强>
您的问题是,您只想在stop_cycle=false;
与input_user
匹配时设置username
。这是不停止循环的唯一时间(即stop_cycle=false;
)
错误是您将stop_cycle=false;
置于if
语句之外。它应该在if
语句中。只要用户名已存在,这将继续“循环”。
所以这段代码可行:
int i=0;
User signed_up[k];
char input_user[15];
bool stop_cycle=false;
do {
printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
stop_cycle=true;
for (i=0;i<k;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
stop_cycle=false;
}
}
} while (!stop_cycle);
其他建议
除了其他人的建议外,我的建议是:
将stop_cycle
重命名为username_exists
,将k
重命名为num_users
。
所以代码看起来像这样:
int i=0;
User signed_up[num_users];
char input_user[15];
bool username_exists=false;
do {
printf("\n\n%*sUsername: ", 26, "");
fflush(stdin);
scanf("%s", input_user);
username_exists=false;
for (i=0;i<num_users;i++) {
if (strcmp(input_user, signed_up[i].username)==0) {
printf("\n%*sUsername inserito gi%c presente nel database!", 26, "", 133);
username_exists=true;
}
}
} while (username_exists);
这清楚表明您的for
循环正在测试是否存在用户名,并且只要用户名存在,就会明确表示您的do
循环将继续。它还清楚地表明k
代表了用户数。