C - 在 for 循环的设置中使用变量

标签 c cs50

我想知道是否可以做这样的事情: 如果数字是偶数,则定义一个字符串变量“replace”,其等于先前定义的数组“arraya”的名称,然后在 for 循环的设置中使用包含字符串 arraya 的变量“replace”,并且还将数组与另一个变量进行比较。下面的代码不起作用,但它可能有助于解释我的疑问。

int x = 0;
int y = 0;

int arraya[] = {2,4,6};
int arrayb[] = {1,3,5};

if ( x % 2 == 0)
{
    string replace = "arraya";
}
else
{
    string replace = "arrayb";
}

for (int i = 0, n = sizeof(replace); i < n; i++)  //instead of using arraya or arrayb, use replace dependig on the condition
{
    if ( x == replace[i])  // same here
         {
            break;
         }
         else
         {
            y++;
         }
}

PD:我知道在 C 中,没有字符串,只有字符数组,但在 CS50 中,他们将变量的类型定义为字符串。

最佳答案

这就是你能做的,

int *p;
int len;
if ( x % 2 == 0)
{
    p = arraya;
    len = sizeof(arraya)/sizeof(arraya[0]);
}
else
{
    p = arrayb;
    len = sizeof(arrayb)/sizeof(arrayb[0]);
}
for (int i = 0, n = len; i < n; i++)  
{
    if ( x == p[i])  // same here
    ...
}

C 中没有隐式字符串类型。而且,如果不对数组对象本身使用 sizeof ,则无法获取数组的长度。此外,您也无法根据字符串的内容获取数组。

您也可以采用另一种方式 - 即抽象出函数中常见的实现逻辑,然后执行以下操作:-

void fun(int *a, int size){
   ....
}

main()

if ( x % 2 == 0)
{
    fun(arraya, sizeof(arraya)/sizeof(arraya[0]));
}
else
{
    fun(arrayb, sizeof(arrayb)/sizeof(arrayb[0]));
}

关于C - 在 for 循环的设置中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48934643/

相关文章:

c - mingw32 编译器使用 -lcrypt 给出错误

c - 无法理解循环中的值如何工作

c - 控制可能会达到非无效功能的终点。 C

c - KERN_INVALID_ADDRESS 让我难住了

c - 我的错误在哪里? CS50贪婪.c

c - 所以break语句只是打破c中的内部for循环或两者

c++ - 根据一组编码标准检查 C/C++ 源代码的免费工具?

c - 在C/Linux中,计时器到期后如何执行代码发布阻止操作?

无法弄清楚我的 C 代码中的这些箭头是什么

c - C 中的随机二维数组