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

标签 c++ cin

我收到一条错误消息说浮点异常(核心已转储),如果我初始化 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/

相关文章:

c++ - 使用 cin 附加到字符串 C++

c++ - 我的程序正在通过 cin.get 从之前的输入获取\n

c++ - 使用 ' ios::sync_with_stdio(0)' 测试运行时差异时,为什么我的输出是零散的?

c++ - glDrawElements 仅导致 GL_PATCHES 的访问冲突

c++ - 我如何在 winXP 中创建一个隐藏进程窗口(从任务栏)的进程?使用 CreateProcess 函数?

c++ - 为什么 OpenSSL 在 Windows 上无法正确链接

c++ - (cin >> buf && !buf.empty()) 中的第二个条件是否多余?

c++ - C++ 的时区偏移类型没有明显的时间戳。滚我们自己的?

c++ - 为什么我已经定义了一个未初始化的局部变量错误?

c++ - 指向 C++ 中的结构的指针 - 从控制台读取?