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