为什么cout不起作用?

shi*_*hin 0 c++ io iostream loops cin

当我尝试从控制台读取输入时,如下所示:

6 6 4
1 1 1
2 1 1
1 2 1
2 2 1
Run Code Online (Sandbox Code Playgroud)

使用以下代码段,对于每行三元组,我只想计算(n/a + 1)*(m/a + 1)并将结果输出到控制台.

while(cin.get()!='\n'){
    int n=0, m = 0, a =0;
    cin >> n >> m >> a;

    cout <<(n/a+1) * (m/a+1) << endl;

}
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,为什么?

gsa*_*ras 7

这里:

while(cin.get()!='\n')
Run Code Online (Sandbox Code Playgroud)

每次循环的条件评估时,您从标准输入中提取一个字符.

因此,当您尝试解析三元组时,该角色已被消耗.


使用std :: getline()逐行解析输入,并从每一行获取三元组.

例:

#include <sstream>
#include <string>
#include <iostream>

int main() {
    std::string line;
    while (std::getline(std::cin, line))
    {
        std::istringstream iss(line);
        int n, m, a;
        if (!(iss >> n >> m >> a)) { break; } // error
        std::cout <<(n/a+1) * (m/a+1) << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

4
4
6
6
9
Run Code Online (Sandbox Code Playgroud)

PS:FYI (n/a+1) * (m/a+1)溢出,如果nm是10万a是单一数字.类型转换的乘法结果long intSICE m,n,a是整数,像这样const_cast<long int>((n/a+1) * (m/a+1)).