C++ Primer 1.4.4.不能完全理解第一个IF语句的需要

Lem*_*myr 3 c++ if-statement nested-loops c++11

我是新来的,拜托,请耐心等待.我目前正在尝试通过C++ Primer第5版学习c ++,而我正在考虑我在第1.4.4节(我设法找到答案)时遇到的疑问,我意识到我不明白需要或关于此代码的第一个IF声明的目的:

#include <iostream>
int main()
{    
int currVal = 0, val = 0;

if (std::cin >> currVal) 
{
    int cnt = 1;  
    while (std::cin >> val) 
    { 
        if (val == currVal)   
            ++cnt;            
        else 
        { 
            std::cout << currVal << " occurs " << cnt << " times" << std::endl;
            currVal = val;    
            cnt = 1;          
        }
    }          
    std::cout << currVal <<  " occurs " << cnt << " times" << std::endl;
} 
return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试以一种看起来更符合逻辑的方式来改变它,以便尝试理解对IF的需求,并最终认为程序看起来完全一样......这是修改:

#include <iostream>
int main()
{   
int currVal = 0, val = 0, cnt=1;    
std::cin >> currVal;         
    while (std::cin >> val) { 
        if (val == currVal) 
            ++cnt; 
        else { 
            std::cout << currVal << " occurs "
                << cnt << " times" << std::endl;
            currVal = val; 
            cnt = 1; 
        }
    }         
    std::cout << currVal << " occurs "
        << cnt << " times" << std::endl;     
return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以这么善良并为我解释一下吗?我会很感激.

fja*_*don 5

如果输入为空或非数字输入,则会打印第二个版本

std::cout << currVal << " occurs "
    << cnt << " times" << std::endl;
Run Code Online (Sandbox Code Playgroud)

随着currVal具有的价值0count1,这是错误的.

请参阅:operator >>