【问题标题】:C reads negative number as positiveC 读负数为正数
【发布时间】:2022-11-25 19:55:09
【问题描述】:

我还是 C 的新手,一直在尝试解决这个练习:给定一个按升序排序的整数数组 nums 和一个整数目标,编写一个函数来搜索 nums 中的目标。如果目标存在,则返回其索引。否则返回-1。

这是我的功能:

 int search(int* nums, int numsSize, int target){
    int i = 0;
    int wynik =0;
    for (i = 0; i<(numsSize -1); i++){
        if (nums[i] == target){
            wynik = i;
        }
        else if (nums[i] != target){
            wynik = -1;
        }}
        return wynik;
    }
    

在之前的所有情况下,它都运行良好,除了一个特殊情况:

  int nums[1] = {5}, target = -5, numsSize = 1;
  int result = search(nums, numsSize,target);
  printf("%d", result);

预期输出是 -1,而我得到的是 0。如果我错了请纠正我,但我认为问题可能在于我的函数以某种方式将负 -5 读取为 5。我该如何解决?非常感谢您提前:)

#include <stdio.h>

  int search(int* nums, int numsSize, int target){
    int i = 0;
    int wynik =0;
    
    for (i = 0; i<(numsSize-1); i++){
        if (nums[i] == target){
            wynik = i;
        }
        else if (nums[i] != target){
            wynik = -1;
        }}
        return wynik;
    }

int main(void) {

  int nums[1] = {5}, target = -5, numsSize = 1;
  int result = search(nums, numsSize,target);
  printf("%d", result);
  
  return 0;
}

【问题讨论】:

  • “我的函数以某种方式将负数 -5 读取为 5 的事实”你有任何证据表明这个“事实”实际上是一个事实吗?我没有看到任何支持该声明的输出。

标签: c for-loop search function-definition


【解决方案1】:

该功能没有意义。

首先不清楚为什么使用条件

i<(numsSize -1)

在导致忽略数组最后一个元素的 for 循环中。

其次,一旦找到目标值,循环就会被中断。

该功能可以如下所示

int search( const int *nums, int numsSize, int target )
{
    int i = 0;

    while ( i < numSize && nums[i] != target ) ++i;

    return i < numSize ? i : -1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多