【问题标题】:Using arrays with for-loops使用带有 for 循环的数组
【发布时间】:2022-01-04 20:10:05
【问题描述】:

问题:

  1. 为什么第一个“cin >>”保存了“score[0]”?既然程序要求输入 5 个数字,那么将输入的数字保存到 5(“score[4]”)的数组中是否有意义?

  2. 我也不明白第二个“cin >> score[i]”的语法。当有数据输入时,我认为“cin>>”与“cout

//Enter five scores. Show how much each differs from the highest score.
#include <iostream>
using namespace std;
    
int main()
{
    int i, score[5], max;
        
    cout<<"Enter 5 scores:\n";
    cin >> score[0];
    max = score[0];
        
    for (i = 1; i < 5; i++)
    {
        cin >> score[i];
        if (score[i] > max)
            max = score[i];
    }
        
    cout <<"Highest score: " <<max<<endl
         <<"The scores and their\n"
         <<"diff. from highest are:\n";
        
    for (i = 0; i < 5; i++)
        cout << score[i] << " off by "
             << (max - score[i]) << endl;
    
    return 0;        
}

【问题讨论】:

  • std::cin &gt;&gt; score[4]; 会将值写入数组的第五个元素,这似乎没有帮助。你的第二个问题没有多大意义,似乎是基于一些奇怪的误解
  • 无法将cin &gt;&gt; 用于整个数组,只能用于单个元素。您似乎认为cin &gt;&gt; score[whatever]; 输入了整个数组,并且它的大小在方括号中表示。不是这种情况。它输入单个元素,即由方括号中的索引指示的元素。
  • std::cin 排除在循环之外是没有意义的。作者可能想确保设置了max,以便可以将其与其余值进行比较,但如果for 循环从0 开始并且可以删除std::cin &gt;&gt; score[0],则将设置max。试试这个int max = -1; for(int i = 0; i &lt; 5; i++){std::cin &gt;&gt; score[i];max = score[i] &gt; max ? score[i] : max;}max = score[i] &gt; max ? score[i] : max;} 是一个内联 if else 以防万一你不知道。

标签: c++ arrays for-loop


【解决方案1】:

cin 是stdin。这是 UNIX 的事情。基本上它是你程序的输入。如果您不执行任何其他操作,那就是您的控制台或终端会话。

cout 是 stdout,另一个 UNIX 事物。是输出。同样,如果您不使用它做任何其他事情,您的控制台或终端会话。它们并不是真正的耦合。这是两个不同的东西,一个只用于输入,一个只用于输出。

现在,让我们看看你的代码:

cin >> score[0];
max = score[0];
    
for (i = 1; i < 5; i++)
{
    cin >> score[i];
    if (score[i] > max)
        max = score[i];
}

这可以简化。您可以去掉前两行并将其更改为:

for (i = 0; i < 5; i++)
{
    cin >> score[i];
    if (score[i] > max)
        max = score[i];
}

您只需要将 max 初始化为一个真正的负值。

cin &gt;&gt; 在这里所做的是读取一个 SINGLE 值 - 一个分数 - 然后将其填充到 score 的单个成员中。所以你不能这样做:

cin >> score;

那是行不通的。好吧,您也许可以使其与运算符重载一起使用,但这是一个高级主题,我从未尝试过。 (坦率地说,我从不使用 &gt;&gt; 运算符,而是寻找其他方式来获取输入。)

另一件事:score[4] 指的不是大小为 5 的数组,而是数组中的第 5 项,就像 score[0] 指第一项一样。它仅指初始定义中的大小:

int score[5];

这是唯一一次[5] 大小差不多。否则它是数组的索引,从 0 开始。所以你有 score[0] ... score[4]

【讨论】:

  • 谢谢。我完全看到了关于 score[4] 的问题的错误。我将它与索引号引用索引变量的数组的初始化混淆了。我的忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2020-03-02
  • 2017-01-17
  • 2014-02-05
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多