C++ 为什么不能';不行?

C++ 为什么不能';不行?,c++,loops,io,iostream,cin,C++,Loops,Io,Iostream,Cin,当我尝试像这样从控制台读取输入时: 6 6 4 1 1 1 2 1 1 1 2 1 2 2 1 对于下面的代码段,对于每行三元组,我只想计算(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; } while(

当我尝试像这样从控制台读取输入时:

6 6 4
1 1 1
2 1 1
1 2 1
2 2 1
对于下面的代码段,对于每行三元组,我只想计算(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;

}
while(cin.get()!='\n'){
int n=0,m=0,a=0;
cin>>n>>m>>a;
cout此处:

每次循环条件求值时,从标准输入中提取一个字符

因此,当您试图解析三元组时,该字符已经被使用


用于逐行解析输入,并从每行中获取三元组

例如:

#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;
}


PS:FYI
(n/a+1)*(m/a+1)
如果
n
m
为100000且
a
为一位数,则将乘法结果强制转换为
long int
n
a
为整数,如下
常量((n/a+1)*(m/a+1))

您知道
cin.get()
将从输入缓冲区提取一个字符。该字符将永远丢失。如果您想一次读取一行,请使用和进行提取。欢迎使用堆栈溢出。“它不起作用”您能告诉发生了什么吗?shin我回答了您的问题,您看到了吗?仅供参考
(n/a+1)*(m/a+1)
如果n和m为100000,a为一位数,则会溢出。键入将乘法结果强制转换为
长整数
sice m,n,a为整数。如下所示
(长整数)((n/a+1)*(m/a+1))
#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;
}
4
4
6
6
9