<分区>
当我尝试像这样从控制台读取输入时:
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;
}
然而,它不起作用,为什么?
<分区>
当我尝试像这样从控制台读取输入时:
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')
每次循环条件求值时,您都从标准输入中提取一个字符。
因此,当您尝试解析三元组时,该字符已被消耗。
使用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;
}
输出:
4
4
6
6
9
PS:仅供引用 (n/a+1) * (m/a+1)
如果 n
将溢出和 m
是 100,000 和 a
是个位数。将乘法结果类型转换为 long int
冰m
, n
, a
是整数,像这样 const_cast<long int>((n/a+1) * (m/a+1))
.
关于c++ - 为什么 cout 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089281/