如何计算数字7出现在数组中的次数

时间:2017-05-04 16:04:43

标签: c computer-science

#include <stdio.h> 
#include <stdlib.h> 
#define LEN 5

int main() 
{ 
int i;
int count = 0;
 size_t *ptr = malloc(sizeof(size_t)*LEN); 

while(1){

 for(i=0;i<LEN;i++){ 
        scanf("%d",&ptr[i]); 
 } 


 for(i=0;i < ptr[i]; i++){ 

     if(ptr = NULL || sizeof(ptr) < 0){
    printf("nah");
 } else if(ptr[i] == 7){
            ++count;
        }
  } printf("%d", count);
    break;
  }
 free(ptr); 
 return 0;
} 

我想要做的是找到数字7出现在malloc中的次数..计数效果很好但是我应该如何显示如果malloc s size is less than zero, or if it为NULL,则必须返回 - 1?

另外,返回-1是什么意思?我对C编程很新... 任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:3)

C没有提供任何直接的工具来让程序知道函数中有错误,所以我们依赖函数的返回值。

例如,在您的情况下,只有大小为0或更大才有意义。如果&#34;错误&#34;发生,您可以返回-1,等待程序结果的任何人都会将结果视为无效,并假设存在某种错误。

因为这并没有融入C语言本身,所以执行纯粹是按照惯例。如果运行程序的人没有检查该值,并使用&#34; -1&#34;就像他们会使用&#34; 5&#34;一样,他们会遇到没有明显原因的问题。

标准库提供的函数通常带有返回值和错误的约定。 malloc就是其中之一。检查documentation,&#34;返回值&#34;失败时为NULL。对于返回指针的函数,将NULL作为失败返回是一种常见的约定。

在您的代码中,您可以添加 size_t *ptr = malloc(sizeof(size_t)*LEN); if (ptr == NULL) {return -1;} 正确检查返回值。

您希望尽快检查空值,因为当它可能为NULL时使用ptr可能会导致segfaults

另一方面,您sizeof使用sizeof(ptr) < 0是可疑的。可以在intsize_t等类型上调用Sizeof,也可以在变量上调用。在这种情况下,您将获得指针类型的大小,就像您调用sizeof(size_t*)一样。查看documentation

最后一点,您正在制作ptr类型的size_t*。指针类型几乎就像整数或其他数字类型,因此sizeof(ptr) < 0条件永远不会为假。看起来你是C的新手,它使用了你在其他语言中看不到的使用指针和其他低级概念。在继续深入讨论之前,我建议加强对C中内存和指针的理解。我使用的一些资源是:TutorialsPointClass websitesNice free guides和{{3 }}

祝你好运!

答案 1 :(得分:0)

有很多问题:

这在for循环中毫无意义,你应该在调用malloc后立即进行测试:

if(ptr = NULL || sizeof(ptr) < 0){
   printf("nah");

测试sizeof(ptr) < 0也毫无意义(但这里不会受到影响),因为sizeof的类型是无符号的,无论如何它都不会是负数。

if (ptr == NULL)代替if (ptr = NULL)

while循环毫无意义,你无条件地摆脱它。

printf("nah");程序退出后不再继续。

你的程序缩进很糟糕,很难阅读。

这是更正版本:

#include <stdio.h> 
#include <stdlib.h> 

#define LEN 5

int main()
{
  int i;
  int count = 0;
  size_t *ptr = malloc(sizeof(size_t)*LEN);

  if (ptr == NULL) {
    printf("nah");
    return 1;
  }

  for (i = 0; i<LEN; i++) {
    scanf("%d", &ptr[i]);
  }

  for (i = 0; i < LEN; i++) {
    if (ptr[i] == 7) {
      ++count;
    }
  }

  printf("%d", count);

  free(ptr);
  return 0;
}