为什么会崩溃?

时间:2013-03-31 15:53:40

标签: c++ windows codeblocks

先生。小Z看着一张纸,试图找到写在纸上的数字的平方根,但没有成功。

帮助Little Z先生找到数字B,它是BIG号A的平方根。数字A最多有1000位数字,A的平方根总是一个整数。

INPUT: 标准输入的第一行包含数字0

输出: 到标准输出写入数M,其中M表示数字B的长度(其中B是数字A的平方根),在接下来的M行中写入数字B的数字(从最高有效数字到数字B)最不重要的)。

输入: 3 6 2 5

输出: 2 2 5

说明: 写在纸上的数字是625,其平方根是25。

我的代码:

#include <iostream> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    int n,m,k,i; 
    int niza[1001]; 

    cin>>m; 
    for(int i=0;i<m;i++) 
    cin>>niza[i]; 

    niza[i]=k; 
    cout<<sqrt(k); 

    return 0; 
} 

2 个答案:

答案 0 :(得分:3)

这很可能是因为您从未设置k,并且它在程序开头包含的随机值为负数,因此sqrt(k)崩溃。此外,如果输入m大于1000,您将超出数组范围。

答案 1 :(得分:1)

您的程序将在niza[i] = k崩溃,因为i超过了数组的末尾。

k未初始化。您正在输出未初始化变量的平方根。

就像@ Vilx-所说,你必须在循环之前检查m的值。

此外,sqrt函数对数字数组不起作用,因此您必须使用不同的方法根据数字计算平方根。

您需要在cincin >> m之后检查cin >> niza[i]的状态。用户可以并且将输入任何内容,例如字母,这会在预期数字时导致失败。

另外,尝试在运算符和函数名之间放置空格。它们不会增加可执行文件的大小或速度,但可以使阅读和维护更容易。