gpt4 book ai didi

c++ - 使用 cin 时的浮点异常(核心转储)

转载 作者:行者123 更新时间:2023-11-30 01:13:07 28 4
gpt4 key购买 nike

我收到一条错误消息说浮点异常(核心已转储),如果我初始化 t=1 而不是 cin>>t ,它工作正常。

我的源码是

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int t,z,i,l,w;

cin>>t;
char a[101];

for(z=0;z<t;z++)
{
cin.getline(a,101);
l=strlen(a);
w=0;
for(i=0;i<l;i++)
{
w=w+(int)a[i];
}
w=w/l;

if(w%2==1)
{
for(i=l-1;i>=0;i--)
{
cout<<a[i];
}
}
else
{
for(i=0;i<l;i++)
{
cout<<a[i];
}
}
cout<<"\n";
}
}

最佳答案

cin>>t; 不读取换行符。所以当你调用cin.getline(a, 101);时,它会直接返回一个空字符串。

这会导致 l 被设置为 0,并且由于不允许被零除,因此会使程序在 w = w/l; 处崩溃;

您可以通过将 cin>>t; 替换为 cin >> t; 来解决部分问题; cin.clear(); cin.ignore();。这将使 cin.getline(a, 101) 按预期工作。

修复的下一部分将是避免读取空数据本身(例如,只需在下一行按回车键)。根据程序的行为方式,您可以重试读取直到设置有效字符串,或者跳过空字符串的执行。我在下面的调整版本中使用了跳过示例。

我还会使用更多的括号来明确什么时候会发生什么(或者至少使用可读的缩进)。

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int t, z, i, l, w;
char a[101];

cin >> t; cin.clear(); cin.ignore(); //Remove leftovers from cin.

for (z = 0; z < t; z++)
{
cin.getline(a, 101);

l = strlen(a);
if (l == 0) //Skip empty words
{
continue;
}

w = 0;
for (i = 0; i < l; i++)
{
w = w + (int)a[i];
}

w = w / l;

if (w % 2 == 1)
{
for (i = l - 1; i >= 0; i--)
{
cout << a[i];
}
}
else
{
for (i = 0; i < l; i++)
{
cout << a[i];
}
}
cout << "\n";
}
}

关于c++ - 使用 cin 时的浮点异常(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com