【问题标题】:Compare an int with double array比较 int 和 double 数组
【发布时间】:2017-11-19 21:50:58
【问题描述】:

我正在尝试学习 C,我想制作一个程序,将我输入的数字与数组中的数字进行比较。唯一的问题是它实际上并没有这样做。即使我输入了一个来自该数组的数字,它也表明该数字不是来自该数组。

    #include <stdio.h>
    void getMark(int findMark, double crswk1[]);
    void changePartMark(double crswk1[], int findMark);

    int main()
    {
    int findMark;
    double crswk1[10]={67, 77, 80, 40};

    getMark(findMark, crswk1);
    changePartMark(crswk1, findMark);
}

void getMark(int findMark, double crswk1[])
{
    printf("Enter the mark you want to change: ");
    scanf("%d", &findMark);

}

void changePartMark(double crswk1[], int findMark)
{
    int i;
        if(findMark == crswk1[i])
            {
            printf("It is equal");
            }
        else
            {
            printf("It is not equal");
            }
}

【问题讨论】:

标签: c compare double


【解决方案1】:

您正在读取的数字永远不会在您的 main 函数中返回到 findMark

void getMark(int findMark, double crswk1[])
{
    printf("Enter the mark you want to change: ");
    scanf("%d", &findMark);

}

此函数在本地参数findMark 中保存一个值。因为C中的所有参数都是按值传递的,所以对这个局部变量的改变不会反映在调用者中,所以main中的findMark永远不会改变。

你需要改变这个函数来获取一个`int

地址
void getMark(int *findMark, double crswk1[])
{
    printf("Enter the mark you want to change: ");
    scanf("%d", findMark);
}

然后你像这样从main 调用这个函数:

getMark(&findMark, crswk1);

通过传入findMark的地址,函数可以写入该地址。

另外,您的 changePartMark 函数不会搜索整个数组。它只查看索引i。但即使这样也是一个问题,因为您从未设置过i

您需要遍历数组以检查数组中每个元素的值。

int i;
for (i=0; i<4 i++) {
    if(findMark == crswk1[i])
        {
        printf("It is equal");
        }
    else
        {
        printf("It is not equal");
        }
}

【讨论】:

  • 如果我只是想让它显示它是相等的,而不显示它不是每个不是我想要的数字的数字都相等
  • @nikunikuD 有另一个变量来标记您是否找到匹配项,并将其初始化为 false。如果找到匹配项,请将标志设置为 true,否则不执行任何操作。循环完成后,检查标志的值。
【解决方案2】:

两个主要问题:

首先,您输入的数字永远不会被传回。当你写

void getMark(int findMark, double crswk1[]) {
    printf("Enter the mark you want to change: ");
    scanf("%d", &findMark);
}

然后您在本地副本findMark 中读取值,而不是在调用者使用的副本中。顺便说一句:crswk1 未使用;所以我建议写

int getMark() {
    int findMark = 0;
    printf("Enter the mark you want to change: ");
    scanf("%d", &findMark);
    return findMark;
}

其次,您的void changePartMark(double crswk1[], int findMark) 缺少循环,并且i 未初始化。代码可能如下所示:

void changePartMark(double crswk1[], int findMark)
{
    for (int i=0; i<4; i++) {
        if(findMark == crswk1[i])
            {
            printf("It is equal");
            }
        else
            {
            printf("It is not equal");
            }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多