首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分割错误:错误代码11

分割错误:错误代码11
EN

Stack Overflow用户
提问于 2015-02-25 18:40:06
回答 2查看 298关注 0票数 0

程序生成分段故障: 11,在Yostemite上

代码语言:javascript
运行
复制
#include<stdio.h>
#include<math.h>
#include<string.h>

int main (){

unsigned long long int inputNumber[99]={0};
int i = 0;

unsigned long long int input= 0;
scanf("%llu", &input);


while( input != EOF ){
        inputNumber[i] = input;

/**在用gdb进行调试时给出:程序接收信号SIGBUS,总线错误。在上面线上。*/ i++;};

代码语言:javascript
运行
复制
for( ; i > 0; i--){
    printf("%.4f\n", sqrt(inputNumber[i]));
}

return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-25 18:45:58

扫描调用不在循环中,因此这将永远运行,然后超过数组缓冲区:

代码语言:javascript
运行
复制
while( input != EOF ){
        inputNumber[i] = input;
        i++;
};

改为:

代码语言:javascript
运行
复制
while( input != EOF ){
        inputNumber[i] = input;
        i++;
       scanf("%llu", &input);
};
票数 1
EN

Stack Overflow用户

发布于 2015-02-25 18:47:15

正如注释中所提到的,您有一个无限循环。Input从来没有被消耗过--它很简单--一个被复制到inputNumber的每个元素中的值。由于输入的值随着时间的推移保持不变,它永远不会等于EOF,循环永远不会结束(除非用户只是输入表示EOF的值)。因此,您正在尝试将值input写入inputNumber数组中越来越高的无限级数,这超出了数组的界限。

也许你想在循环中移动扫描?

编辑:另外,我不太确定您想要做什么,如果您尝试逐字符读取数字(“数字逐位”)并将其存储在数组中,您可以使用getchar函数来完成这一操作,它将返回缓冲输入(即按enter之后的标准输入)作为char数据类型。在这种情况下,您的inputNumber数组必须是char数组,并且您必须用一些代码将其解析为整数。再说一遍,我不确定这是不是你想做的,但我想我应该提一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28727046

复制
相关文章

相似问题

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