该程序在Yostemite上生成Segmentation fault:11,
#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,总线错误。 在上面。 * / 我++; };
for( ; i > 0; i--){
printf("%.4f\n", sqrt(inputNumber[i]));
}
return 0;
}
答案 0 :(得分:1)
你的scanf调用不在循环中,所以这会永远运行然后超出数组缓冲区:
while( input != EOF ){
inputNumber[i] = input;
i++;
};
更改为:
while( input != EOF ){
inputNumber[i] = input;
i++;
scanf("%llu", &input);
};
答案 1 :(得分:1)
正如ouah在评论中提到的,你有一个无限循环。永远不会消耗Input
- 将一个值复制到inputNumber
的每个元素中都很简单。由于输入值随时间保持不变,它永远不会等于EOF,循环将永远不会结束(除非用户只输入表示EOF的值)。因此,您试图将值input
写入inputNumber
数组中越来越高的无限级数,超出数组范围。
也许你想在循环中移动scanf?
编辑:另外,我不太确定你要做什么,如果你试图按字符读取数字(“逐位数”)并将其存储在数组中,你可以使用getchar函数执行此操作,该函数将逐个字符地返回缓冲输入(即,按Enter后的标准输入)作为char
数据类型。在这种情况下,您的inputNumber
数组必须是一个char数组,并且您必须将其解析为带有一些代码的整数。再次,不确定这是否是你想要做的,但我想我会提到它。