程序生成分段故障: 11,在Yostemite上
#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++;};
for( ; i > 0; i--){
printf("%.4f\n", sqrt(inputNumber[i]));
}
return 0;
}
发布于 2015-02-25 18:45:58
扫描调用不在循环中,因此这将永远运行,然后超过数组缓冲区:
while( input != EOF ){
inputNumber[i] = input;
i++;
};
改为:
while( input != EOF ){
inputNumber[i] = input;
i++;
scanf("%llu", &input);
};
发布于 2015-02-25 18:47:15
正如注释中所提到的,您有一个无限循环。Input
从来没有被消耗过--它很简单--一个被复制到inputNumber
的每个元素中的值。由于输入的值随着时间的推移保持不变,它永远不会等于EOF,循环永远不会结束(除非用户只是输入表示EOF的值)。因此,您正在尝试将值input
写入inputNumber
数组中越来越高的无限级数,这超出了数组的界限。
也许你想在循环中移动扫描?
编辑:另外,我不太确定您想要做什么,如果您尝试逐字符读取数字(“数字逐位”)并将其存储在数组中,您可以使用getchar函数来完成这一操作,它将返回缓冲输入(即按enter之后的标准输入)作为char
数据类型。在这种情况下,您的inputNumber
数组必须是char数组,并且您必须用一些代码将其解析为整数。再说一遍,我不确定这是不是你想做的,但我想我应该提一下。
https://stackoverflow.com/questions/28727046
复制相似问题