我正在尝试创建一个程序,它在循环中接受一个输入并跟踪到目前为止看到的最小和最大。 我写代码,但我不知道它有什么问题,这是代码:
POST https://graph.microsoft.com/beta/me/messages/AAMkAGE1M88AADUv0uFAAA=/attachments
Content-type: application/json
Content-length: 319
{
"@odata.type": "#microsoft.graph.referenceAttachment",
"name": "Personal pictures",
"sourceUrl": "https://contoso.com/personal/mario_contoso_net/Documents/Pics",
"providerType": "oneDriveConsumer",
"permission": "Edit",
"isFolder": "True"
}
这是输出;
double val = 0;
double smaller = 0;
double larger = 0;
while(cin >> val){
cout << val << '\n';
if(val >= larger){
larger = val;
cout << "the larger so far\n";
}
else if(val <= smaller){
smaller = val;
cout << "the smaller so far\n";
}
else
cout << "in between\n";
答案 0 :(得分:3)
double smaller, larger = 0;
这相当于:
double smaller;
double larger = 0;
而不是,正如你可能已经想到的那样:
double smaller = 0;
double larger = 0;
这意味着当您开始使用它时,您将smaller
未初始化,从而导致未定义的行为。
答案 1 :(得分:1)
您使用零初始化smaller
,但如果您收到的数字大于0但仍然是输入中的最小值,则smaller
变量将不会更新。
如果所有数字都为负数,则larger
值会出现同样的问题(例如,如果输入为-1; -3
,则larger
将不会更新)。
有两种方法可以解决这个问题。
smaller
,其中保证的值小于所有输入,larger
的值保证更大而不是所有的输入。smaller
和larger
。答案 2 :(得分:0)
这里我解决了问题:
double val = 0;
double smaller = std::numeric_limits<double>::max();
double larger = std::numeric_limits<double>::min();
while(cin >> val){
cout << val << '\n';
if(val >= larger){
larger = val;
cout << "the larger so far\n";
}
else if(val <= smaller){
smaller = val;
cout << "the smaller so far\n";
}
else
cout << "in between\n";