c++ - 为什么 cout 不起作用?

标签 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(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 intm , n , a是整数,像这样 const_cast<long int>((n/a+1) * (m/a+1)) .

关于c++ - 为什么 cout 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089281/

相关文章:

C++ 除以零

c++ - 'this' cannot be used in a constant expression error (C++) with this-> pointer variable

java - 文件复制在 Eclipse 测试环境中有效,但在打包程序中产生 URI 错误

java - Scanner(System.in)-如何取消/跳过输入等待

python - 一起循环两个生成器

c++ - 如何在 C++ 中最大化 SSD I/O?

c++ - 错误消息 "undefined reference to ' 列表::a'"

c++ - Allegro vs OpenGL 速度/效率明智

python - 跨数据框迭代函数

javascript - 循环中的 Angular promise