我的建议是更改循环,以便将“ listB”上的循环作为外部循环,并在内部循环上对“ listA”进行迭代。
然后,您可以轻松地在内环中设置一个标志,并在找到匹配项时在其中break
之外设置。在外循环中,您可以检查此标志来决定要打印的内容。
在伪代码中,也许像这样
for (to_find in listB)
{
found_flag = false;
for (animal in listA)
{
if (to_find == animal)
{
found_flag = true;
break;
}
}
if (found_flag)
printf("Animal found");
else
printf("Animal not found");
}
,
您的continue
总是被执行;您将永远不会到达第二个if
。
,
首先,使用goto
,如下所示:
void something(void) {
// index through listA
for(int i = 0; i < alineno; i++){
// index through all the words in listB
for(int j = 0; j < blineno; j++){
if(strcmp(aline[i],bline[j]) == 0){
printf("%s is in the list!",bline[j]);
goto doneAnimal;
}
}
printf("%s is not in the list!",bline[i]);
doneAnimal: ;
}
}
第二;为避免胡说八道的错误(请参阅下面的历史记录),请将代码分成2个不同的函数使代码更难阅读,以便可以将goto
转换为return
,就像这样:
void something(void) {
// index through listA
for(int i = 0; i < alineno; i++){
doAnimal(i,blineno);
}
}
void doAnimal(int i,int blineno) {
for(int j = 0; j < blineno; j++){
if(strcmp(aline[i],bline[j]) == 0){
printf("%s is in the list!",bline[j]);
return;
}
}
printf("%s is not in the list!",bline[i]);
}
历史记录
从前,高级语言(如汇编语言)没有结构化的编程功能(do
,while
,break
,continue
,{{1} },...)。相反,程序员会使用switch
来编写代码,例如(例如)“ goto
”而不是“ if(x < MAX) goto loopStart;
”。
为鼓励采用结构化编程功能,1968年Edsger W. Dijkstra给ACM的编辑写了一封信,标题为“声明被认为有害”。这封信产生了预期的效果-所有主要语言都采用了结构化的编程功能(} while(x < MAX);
,do
,while
,break
,continue
等)语言。
但是;它还有一个意想不到的副作用-这封信有点太有效了;愚昧无知的人(无法阅读字母或理解其上下文)开始变得狂热,使他们的代码变得更糟(对于新的结构化语言功能还不够的情况),以免在不了解原因的情况下转到goto,并鼓励其他人他们的代码不了解为什么会变得更糟。
例如,通过纯粹为了避免使用简单的switch
引入额外的变量来使代码复杂,和/或纯粹为了避免简单的goto
来引入额外的分支的复杂代码。
稍后(与Donald E. Knuth对话);迪克斯特拉本人说:“ 请不要陷入相信我对[go to statement]极为教条的陷阱。我对其他人正在从中发扬宗教信仰感到不安 >,就好像编程的概念性问题可以通过一个技巧,一种简单的编码规则来解决!”
可悲;一旦无知开始蔓延,常识就是在打败一场战斗。
,
执行此操作的最佳方法可能是二进制搜索或哈希表,具体取决于数据量。话虽如此,代码可以通过以下方式进行改进:
for(int i = 0; i < alineno; i++)
{
int j;
for(j = 0; j < blineno; j++)
{
if(strcmp(aline[i],bline[j]) == 0)
break;
}
if(j == blineno)
printf("%s is not in the list!",aline[i]);
else
printf("%s is in the list!",bline[j]);
}
注意:printf中的aline[i]
不是bline[i]
。如果允许bline[i]
和alineno
具有不同的长度,则blineno
将是一个潜在的数组错误。
本文链接:https://www.f2er.com/3125878.html