如何在执行所有 if else 代码后最后打印一个条件

how to print a condition at last after executing all the if else code

如果输入在字符串名称中,我想检查输入然后打印数字 给定的名称。如果给定名称不在 字符串名称 中,则打印“你的名字不在这里”,但每次我 运行 我都得到“你的名字不在这里”代码。

#include<stdio.h>
#include<cs50.h>
#include<string.h>

int main(void)
{
string userinput;
string names [] = {"david", "mark"};
string numbers[] = {"123456789","987654321"};
userinput = get_string("name: ");

for(int i = 0; i<2 ;i++)
{
    if(strcmp(names[i], userinput) == 0)
    {
        printf("your number is %s ", numbers[i]);
    }
}
printf("your name is not here\n");
}




 **ACTUAL OUTPUT**

 name: david
 your number is 123456789 your name is not here

一个非常简单的解决方案是创建一个变量来跟踪是否找到了名称:

int found = 0;
for(int i = 0; i<2 ;i++)
{
    if(strcmp(names[i], userinput) == 0)
    {
        printf("your number is %s ", numbers[i]);
        found = 1;
        // Break so we don't have to iterate over the rest
        // of the items if we already found our name.
        break;
    }
}
if (!found) printf("your name is not here\n");

这自然是很简单的代码,但你应该早早就开始考虑程序设计了。您的代码执行三项不同的独立操作:

  1. 提示 input/take 用户输入 (I/O)。
  2. 如果输入与值匹配则搜索(搜索算法)。
  3. 展示结果(I/O)。

最好将第 2) 部分和第 3) 部分分开,以免 I/O 与算法混淆,因此:

#include <stdbool.h>
...

bool found = false;
for(int i=0; i<2; i++)
{
  if(strcmp(names[i], userinput) == 0)
  {
    found = true;
    break;
  }
}

if(found)
{
  printf("your number is %s \n", numbers[i]);
}
else
{
  printf("your name is not here\n");
}

如果愿意,我们可以将这些部分拆分为单独的函数。例如,如果字符串的数量被扩展,我们将希望实现比这种“暴力”循环更好的搜索算法。