gpt4 book ai didi

c++ - While循环导致文件崩溃

转载 作者:行者123 更新时间:2023-12-02 08:21:40 25 4
gpt4 key购买 nike

我正在为一个编程类编写代码,该类接受年份列表,然后显示它们是否是闰年。当我运行代码时,在输入年份列表并按回车键后,文件崩溃了。

    #include <iostream>
#include <cstdlib>
#include <vector>

int main(void)
{
std::vector<int> years;
int c = 0;
int i;
int x = 1;

std::cout<< "Enter a space separated list of years (enter a negative number to stop)"<<std::endl;

while(x>0)
{
if(x<=0)
{
break;
}
std::cin>> x;
years[c] = x;
c++;
}

for(i=0; i<=years.size(); i++)
{
if((years[i] % 4 == 0 && years[i] % 100 != 0) || (years[i] % 400 == 0))
{
std::cout<< years[i] << " is a leap year" << std::endl;
}else{std::cout<< years[i] << " is not a leap year" << std::endl;}
}
return 0;
}

最佳答案

问题 1

years的声明创建一个空 vector 。因此,该行

years[c] = x;

不对。它访问years使用越界索引。使用

years.push_back(x);

问题2

读取数据并检测停止时间的逻辑是错误的。

std::cin>> x;
years[c] = x;

存在两个问题。

  1. 它不会检查 x 的值是否为在将其添加到 years 之前大于 0 .
  2. 它不会检查读取的数据是否为x那是成功的。它假设它是成功的。

将读取代码更改为:

while(std::cin >> x)
{
if(x<=0)
{
break;
}

years.push_back(x);
}

您可以将检查组合到 while 的条件中声明。

while ( (std::cin >> x) && ( x > 0 ) )
{
years.push_back(x);
}

问题3

您正在写的内容比 years 多了一项当您使用 i <= years.size() 时成立在循环。它需要是i < years.size() .

for ( size_t i = 0; i < years.size(); i++)
{
if((years[i] % 4 == 0 && years[i] % 100 != 0) || (years[i] % 400 == 0))
{
std::cout<< years[i] << " is a leap year" << std::endl;
}
else
{
std::cout<< years[i] << " is not a leap year" << std::endl;
}
}

关于c++ - While循环导致文件崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49001477/

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