首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算数字7在数组中出现的次数

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

Stack Overflow用户
提问于 2017-05-05 00:04:43
回答 2查看 60关注 0票数 1
代码语言:javascript
复制
#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中出现的次数。计数工作得很好,但是我应该如何显示如果mallocs size is less than zero, or if it为空,它必须返回-1?

另外,返回-1意味着什么?我是个C编程新手。任何帮助都将是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2017-05-05 00:26:46

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

例如,在您的例子中,只有当大小为0或更大时才有意义。如果出现" error“,您可以返回-1,等待程序结果的任何人都会看到结果无效,并假定存在某种类型的错误。

因为这不是C语言本身的特性,所以强制执行完全是按照约定进行的。如果运行你的程序的人不检查这个值,而是像使用"5“一样使用"-1”,他们就会遇到没有明显原因的问题。

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

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

您希望尽快检查NULL值,因为在可能为null的情况下使用ptr可能导致segfaults

另请注意,您在sizeof(ptr) < 0中使用sizeof是可疑的。Sizeof可以在intsize_t这样的类型上调用,也可以在变量上调用。在本例中,您将获得指针类型的大小,就像您调用sizeof(size_t*)一样。查看documentation

最后要注意的是,您正在生成size_t*类型的ptr。指针类型几乎类似于整数或其他数字类型,因此sizeof(ptr) < 0条件永远不会为false。看起来你是第一次接触C,它使用了指针和其他低级概念,这在其他语言中是看不到的。在继续深入之前,我建议巩固您对C中内存和指针的理解。我使用的一些资源包括:TutorialsPointClass websitesNice free guideswikibooks

祝好运!

票数 3
EN

Stack Overflow用户

发布于 2017-05-05 00:46:41

有很多问题:

这在for循环中毫无意义,您应该在调用malloc之后立即执行该测试

代码语言:javascript
复制
if(ptr = NULL || sizeof(ptr) < 0){
   printf("nah");

测试sizeof(ptr) < 0也是没有意义的(但在这里不会有什么坏处),因为sizeof的类型是无符号的,而且它也不会是负的。

它是if (ptr == NULL)而不是if (ptr = NULL)

while循环是毫无意义的,您是在无条件地跳出它。

printf("nah");之后,程序应该退出并且不再继续。

而且你的程序的缩进很可怕,很难读懂。

这是一个更正的版本:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43787863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档